当前位置: 代码网 > it编程>编程语言>Java > 数据结构 Java数据结构 --- List ArrayList

数据结构 Java数据结构 --- List ArrayList

2024年08月01日 Java 我要评论
i++) {if(!运行结果:5.4 ArrayList实现的简易扑克牌@Override/**构造一副牌@return*///四种花色i < 4;i++) {//每个花色13张牌j < 13;j++) {//花色//牌数//得到一张牌card*///优化后的代码/**洗牌*/i > 0;i–) {System.out.println(“刚开始的牌:”+cards);

string str2 = “come”;

arraylist list1 = new arraylist<>();

for (int i = 0; i < str1.length(); i++) {

char ch = str1.charat(i);

if(!str2.contains(ch+“”)){

list1.add(ch);

}

}

for (char ch : list1 ) {

system.out.print(ch);

}

}

运行结果:

在这里插入图片描述

5.4 arraylist实现的简易扑克牌


import java.util.arraylist;

import java.util.list;

import java.util.random;

class card{

private int rank;

private string suit;

public card(int rank, string suit) {

this.rank = rank;

this.suit = suit;

}

public int getrank() {

return rank;

}

public void setrank(int rank) {

this.rank = rank;

}

public string getsuit() {

return suit;

}

public void setsuit(string suit) {

this.suit = suit;

}

@override

public string tostring() {

return “{” + suit + “->” +rank + “}”;

}

}

public class test {

private static final string[] suits = {“❤”,“♠”,“♣”,“♦”};

/**

  • 构造一副牌

  • @return

*/

public static list buycard(){

arraylist cards = new arraylist<>();

//四种花色

for (int i = 0; i < 4; i++) {

//每个花色13张牌

for (int j = 0; j < 13; j++) {

/*string suit = suits[i];//花色

int rank = j ;//牌数

card card = new card(rank,suit);//得到一张牌card

cards.add(card);*/

cards.add(new card(j,suits[i]));//优化后的代码

}

}

return cards;

}

private static void swap(list cards,int i,int j){

card tmp = cards.get(i);

cards.set(i,cards.get(j));

cards.set(j,tmp);

}

/**

  • 洗牌

  • @param cards

*/

public static void shuffle(list cards){

int size = cards.size();

for (int i = size - 1; i > 0; i–) {

random random = new random();

int rand = random.nextint(i);

swap(cards,i,rand);

}

}

public static void main(string[] args) {

list cards = buycard();

system.out.println(“刚开始的牌:”+cards);

shuffle(cards);

system.out.println(“洗过后的牌:”+cards);

arraylist<list> hand = new arraylist<>();

list hand1 = new arraylist<>();

list hand2 = new arraylist<>();

list hand3 = new arraylist<>();

hand.add(hand1);

hand.add(hand2);

hand.add(hand3);

//每个人,轮流揭牌

for (int i = 0; i < 5; i++) {

for (int j = 0; j < 3; j++) {

card card = cards.remove(0);//拿一张牌 少一张牌 remov去掉

hand.get(j).add(card);

}

}

system.out.println("第1个人的牌: "+hand1);

system.out.println("第2个人的牌: "+hand2);

system.out.println("第3个人的牌: "+hand3);

system.out.println("剩余的排: "+cards);

}

}

6 . arraylist的模拟实现

=====================================================================================

package demo;

import java.util.arrays;

class myarraylist {

private object[] elem;//数组

private int usedsize;//代表有效数据个数

private static final object[] defaultcapacity_empty_elementdata = {};

public myarraylist() {

this.elem = defaultcapacity_empty_elementdata;

}

public myarraylist(int capacity) {

//对参数进行一个判断

if (capacity > 0) {

this.elem = new object[capacity];

} else if (capacity == 0) {

this.elem = new object[0];

} else {

throw new illegalargumentexception(“不能为负数!”);

}

}

/**

  • 尾插 e

  • @param e

  • @return

*/

public boolean add(e e) {

//缺点一个真正的容量.扩容

ensurecapacityinternal(usedsize + 1);

elem[usedsize] = e;

usedsize++;

return true;

}

private void ensurecapacityinternal(int mincapacity) {

//计算出需要的容量

int capacity = calculatecapacity(elem, mincapacity);

//拿着计算出的容量,去判断是否扩容,需要扩容就扩容

ensureexplicitcapacity(capacity);

}

private static int calculatecapacity(object[] elem, int mincapacity) {

//1.是否elem数组分配过大小

if (elem == defaultcapacity_empty_elementdata) {

return math.max(10, mincapacity);

}

//2.分配过 就返回+1的值

return mincapacity;

}

private void ensureexplicitcapacity(int mincapacity) {

if (mincapacity - elem.length > 0) {

//扩容

grow(mincapacity);

}

}

private static final int max_array_size = integer.max_value - 8;

private void grow(int mincapacity) {

int oldcapacity = elem.length;

int newcapacity = oldcapacity + (oldcapacity >> 1);//1.5倍扩容

if (newcapacity - mincapacity < 0)

newcapacity = mincapacity;

if (newcapacity - max_array_size > 0)

//说明需要的容量非常大

newcapacity = hugecapacity(mincapacity);

elem = arrays.copyof(elem, newcapacity);

}

private static int hugecapacity(int mincapacity) {

if (mincapacity < 0)

throw new outofmemoryerror();

return (mincapacity > max_array_size) ?

integer.max_value :

max_array_size;

}

/**

  • 将 e 插入到 index 位置

  • @param index

  • @param e

*/

public void add(int index, e e) {

rangecheckforadd(index);

ensurecapacityinternal(usedsize + 1);

copy(index, e);

usedsize++;

}

private void copy(int index, e e) {

for (int i = usedsize - 1; i >= index; i–) {

elem[i + 1] = elem[i];

}

elem[index] = e;

}

/**

  • 判断index位置是否合法

  • @param index

*/

public void rangecheckforadd(int index) {

if (index < 0 || index > size()) {

throw new indexoutofboundsexception(“index位置不合法无法插入”);

}

}

/**

  • 获取顺序表的大小

  • @return

*/

public int size() {

return this.usedsize;

}

/**

  • 获取o第一次出现的位置

  • @param o

  • @return

*/

public int indexof(object o) {

if (null == o) {

for (int i = 0; i < usedsize; i++) {

if (elem[i] == null) {

return i;

}

}

} else {

for (int i = 0; i < usedsize; i++) {

if (elem[i].equals(o)) {

return i;

}

}

}

return -1;

}

/**

  • 删出第一次出现的e

  • @param o

  • @return

*/

public boolean remove(object o) {

int index = indexof(o);

if (index == -1) {

return false;

}

remove(index);

return true;

}

/**

  • 删除index位置上元素

  • @param index

  • @return

*/

public e remove(int index) {

rangecheckforadd(index);

e e = (e) elem[index];

// 将index之后的元素统一往前搬移一个位置

for (int i = index; i < usedsize - 1; ++i) {

elem[i] = elem[i + 1];

}

elem[usedsize] = null;

usedsize–;

return e;

}

/**

  • 获取index位置上的元素

  • @param index

  • @return

*/

public e get(int index) {

rangecheckforadd(index);

return (e) elem[index];

}

/**

  • 将index位置上元素设置为e

  • @param index

  • @param e

  • @return

*/

public e set(int index, e e) {

rangecheckforadd(index);

elem[index] = e;

return e;

}

/**

  • 清空

*/

public void clear() {

for (int i = 0; i < usedsize; i++) {

elem[i] = null;

}

usedsize = 0;

}

@override

public string tostring() {

string s = “[”;

if (usedsize > 0) {

for (int i = 0; i < usedsize - 1; i++) {

s += elem[i];

s += ", ";

}

s += elem[usedsize - 1];

}

s += “]”;

return s;

}

}

public class main {

public static void main(string[] args) {

myarraylist list = new myarraylist<>();

list.add(“q”);

list.add(“w”);

list.add(“e”);

list.add(“r”);

list.add(“t”);

system.out.println(list);

system.out.println(list.indexof(“r”));

system.out.println(list.get(1));

system.out.println(list.set(5, “666”));

list.clear();

system.out.println(list);

}

}

运行结果:

在这里插入图片描述

7 . 解决杨辉三角题

==============================================================================

leetcode 118:杨辉三角

描述:

给定一个非负整数 numrows,生成「杨辉三角」的前 numrows 行。

在「杨辉三角」中,每个数是它左上方和右上方的数的和。

在这里插入图片描述

在这里插入图片描述

解题思路:

1.第一行永远为1,提前让第一行为1.

2.从第二行开始,首尾都是1,中间的是由上一层该位置和前一个位置的和组成

3.杨辉三角每一层数的个数和层数相同

画图解析:

在这里插入图片描述

public list<list> generate(int numrows) {

list<list> ret = new arraylist<>();

//第一行 永远为1的情况:

list list1 = new arraylist<>();

list1.add(1);

ret.add(list1);
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、oppo等大厂,18年进入阿里一直到现在。

深知大多数java工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上java开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!

如果你觉得这些内容对你有帮助,可以扫码获取!!(备注java获取)

img

笔者福利

以下是小编自己针对马上即将到来的金九银十准备的一套“面试宝典”,不管是技术还是hr的问题都有针对性的回答。

有了这个,面试踩雷?不存在的!

回馈粉丝,诚意满满!!!




《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》
大家的负担。**[外链图片转存中…(img-c2l6w60u-1712937238403)]

[外链图片转存中…(img-xnzore2j-1712937238404)]

[外链图片转存中…(img-rdfh1azg-1712937238404)]

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上java开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!

如果你觉得这些内容对你有帮助,可以扫码获取!!(备注java获取)

img

笔者福利

以下是小编自己针对马上即将到来的金九银十准备的一套“面试宝典”,不管是技术还是hr的问题都有针对性的回答。

有了这个,面试踩雷?不存在的!

回馈粉丝,诚意满满!!!

[外链图片转存中…(img-odru54ex-1712937238404)]
[外链图片转存中…(img-gs9ihoub-1712937238404)]
[外链图片转存中…(img-265ejuho-1712937238405)]
[外链图片转存中…(img-2k8fnwnd-1712937238405)]

《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com