集合的学习让我收获很多,下面分享一下我在集合中学到的内容。
集合和数组的区别:
数组的特点:
1.长度是固定的;
2.存储的数据类型只能是一种;
3.有默认值。
集合的特点:
1.长度是可变的;
2.用于存储对象的容器;
3.不能存储基本数据类型。
集合的体系:
其中学到了List与Set的区别。
List特点:
1.有重复(集合里面的内容可以重复)
2.有顺序(集合的存取是有顺序的)
3.有索引(是有缩影的)
Set的特点
1.不能重复
2.没有顺序
3.没有索引
今天学习的主要是List!
首先因为List和Collection是接口,就意味着不能直接去实现,所以我们会用到Java里面的多态,我们用父类去实现子类,这样就可以做到了。
Collection c = new ArrayList();
Lise l = new ArrayList();
学习到了非常多Collection中的方法,常用到的有:
int size():获取集合的长度。
Object[] toArray():能够将集合转换成数组并把集合中的元素存储到数组中。
之后学到了迭代器。
hasNext()方法:判断集合中是否有元素可以迭代
next()方法:用来返回迭代的下一个元素,并把指针向后移动一位。
remove():删除当前正在获取的元素
其中就有特殊的地方, 当使用迭代器遍历集合的时候,使用了集合中的 增加/删除 方法,导致并发修改异常。
解决办法:
A:不使用迭代器遍历集合,就可以在遍历的时候使用集合的方法进行增加或删除
B:依然使用迭代器遍历,那么就需要使用Iterator的子接口ListIterator来实现向集合中添加
迭代器也是用于遍历集合的。
增强for循环也是可以用来遍历集合和数组的。
List的特有功能
void add(int index, E element) :将元素添加到index索引位置上
E get(int index) :根据index索引获取元素
E remove(int index) :根据index索引删除元素
E set(int index, E element):将index索引位置的的元素设置为element
LinkedList特有功能
LinkedList底层使用的是链表结构,因此增删快,查询相对ArrayList较慢
void addFirst(E e) :向链表的头部添加元素
void addLast(E e):向链表的尾部添加元素
E getFirst():获取链头的元素,不删除元素
E getLast():获取链尾的元素,不删除元素
E removeFirst():返回链头的元素并删除链头的元素
E removeLast():返回链尾的元素并删除链尾的元素o
工具类Collections和Collection没有半毛钱的关系!
Collections的方法:
- static void copy(List dest, List src) :是把源列表中的数据覆盖到目标列(复制集合)
* static void fill(List list, Object obj) :使用指定的对象填充指定列表的所有元素
* //static void reverse(List list) :反转
* //static void shuffle(List list):傻否,随机置换
* //static void sort(Listlist) :按照列表中元素的自然顺序进行排序
* //static void swap(List list, int i, int j) :将指定列表中的两个索引进行位置互换
作业斗地主的案例:
题目:
- 组装54张扑克牌
- 将54张牌顺序打乱
- 三个玩家参与游戏,三人交替摸牌,每人17张牌,最后三张留作底牌。
- 查看三人各自手中的牌、底牌
代码实现:
public class DouDiZhuDemo {
public static void main(String[] args) {
List dpList = new ArrayList();
String [] color = {"黑桃","红桃","梅花","方块"};
String [] paizi = {"A","2","3","4","5","6","7","8","9","10","J","Q","K"};
for (int i = 0; i < paizi.length; i++) {
for (int j = 0; j < color.length; j++) {
dpList.add(color[j] + paizi[i]);//这是添加每一张牌
}
}
//添加大王,小王
dpList.add("大王");
dpList.add("小王");
System.out.println(dpList);
Collections.shuffle(dpList);
System.out.println(dpList);
Collections.shuffle(dpList);
System.out.println(dpList);
ArrayList wangyi = new ArrayList();
ArrayList denger = new ArrayList();
ArrayList tangsan = new ArrayList();
for (int i = 0; i < dpList.size()-3; i++) {
Object o = dpList.get(i);
if(i%3==0){
wangyi.add(o);
}else if(i%3 == 1){
denger.add(o);
}else if (i%3==2){
tangsan.add(o);
}
}
System.out.println(wangyi.size());
System.out.println(wangyi);
System.out.println(denger.size());
System.out.println(denger);
System.out.println(tangsan.size());
System.out.println(tangsan);
List list = dpList.subList(dpList.size() - 3, dpList.size());
System.out.println("最后三张底牌");
System.out.println(list);
}
}