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