1. 程式人生 > 實用技巧 >學習Java的第08天.集合

學習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);

}

}