学习Java的第08天.集合

集合的学习让我收获很多,下面分享一下我在集合中学到的内容。

集合和数组的区别:

数组的特点:

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(List list) :按照列表中元素的自然顺序进行排序
    * //static void swap(List list, int i, int j) :将指定列表中的两个索引进行位置互换

作业斗地主的案例:

题目:

  1. 组装54张扑克牌
  2. 将54张牌顺序打乱
  3. 三个玩家参与游戏,三人交替摸牌,每人17张牌,最后三张留作底牌。
  4. 查看三人各自手中的牌、底牌

代码实现:
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);

}

}

原文地址:https://www.cnblogs.com/cxrblog/p/13971095.html