常用集合關係圖
集合方法關係圖
Collection
- 定義
- Collection是單列集合, 用於存儲單個元素
- 分類
- List 集合中的元素是有序的,可以存放重複元素
- Queue 隊列, 除優先級外, 保持先進先出的原則(基本不用)
- Set 集合中的元素是無序的, 不能存放重複的元素
List
-
定義
- List集合是有序的,可以儲存重複的數據
- List集合通過記錄元素在集合中的位置來準確的查找元素
-
List集合體系
- ArrayList 底層使用數組(線程不安全)
- LinkedList 底層使用鏈表
- Vector 底層使用數組(線程安全的,不推薦使用)
Set集合
- 定義
- Set集合存儲的元素是無序的, 而且不允許儲存重複的元素
- 每當有新的元素存入的時候,Set集合會先去過濾, 如果發現和集合中現有元素出現重複, 就不在允許添加
Map集合
-
定義
- Map集合是一個雙列集合,以鍵值對的形式存在
- 將鍵和值捆綁到一起存放(Map.Entry)
- 一個映射不能包含重複的鍵
- 如果出現相同的鍵,會用新的值覆蓋老的值
- 每個鍵最多隻能映射到一個值
-
Map接口和Collection接口的不同
- Map是雙列的,Collection是單列的
- Map集合的數據結構針對鍵有效, 跟值無關, Collection 集合的數據結構是針對元素有效
-
存儲原理解析
- 當我們將key和value存入Map集合的時候, map集合會創建一個Map.Entry對象包裹住鍵值對然後通過key計算出一個角標, 然後存入進入集合中
遍歷方式
迭代器
-
定義
-
集合是用來存儲元素,存儲的元素需要查看,那麼就需要迭代(遍歷)
-
迭代器的使用
-
Collection c = new ArrayList(); c.add(); //ArrayList c = new ArrayList(); //HashSet s = new HashSet(); Iterator it = c.iterator(); //Iterator it= 單列集合.iterator(); while (it.hasNext()) {//判斷是否有下一個元素,如果有則返回true,否則返回false // 如果有就取出這個元素 Object object = (Object) it.next();//返回當前指針所在位置上的元素 System.out.println(object); }
-
Foreach
-
foreachd 的使用格式
/* for(目標容器中的數據類型 臨時變量名 : 目標容器) { } */
遍歷的過程中增刪集合中的元素
- 三種迭代方式的刪除
- 普通for循環,可以刪除,但是需要索引(可以用但有邏輯問題)
- 迭代器,可以刪除,但是必須使用迭代器自身的remove方法,否則會出現併發修改異常
- 增強for循環不能刪除
泛型(瞭解)
- 預編譯我們的集合,規定了本集合中只能存放指定類型的數據
- 保證數據的統一性、純潔性
- 例:ArrayList<>
ArrayList,HashSet,HashMap遍歷
ArrayList a01 = new ArrayList();
HashSet s01 = new HashSet();
//1、循環for-while
for(int i=0;<a01.size();i++)//或while
Sysout.println(a01.get(i))
//2、迭代器
Iterator it =a01.iterator();
Iterator it =S01.iterator();//set 除了迭代器定義不同,其它相同
while(it.hasNext()){
Object obj=(Object) it.next();
Sysout->obj;
}
//3、for-each
//for(Object obj :s01)set這裏改一下其它一致
for(Object obj: a01)
Sysout->obj
//================================================
//HashMap 的遍歷比較特殊,不可直接遍歷,需要轉換一下
HashMap m=new HashMap();
//1> K ==> V 先找到key值來找到v值
Set keys=m.keySet();
//2> entry(實例-[key-value鍵值對封裝成set集合])
Set e=m.entrySet();
//Set<Map.Entry<E,E> > en=m.entrySet();3>泛型後,可分別輸出
//遍歷key--迭代器 或 foreach(不寫)
Iterator it=keys.iterator();
while(it.hasNext()){
Object obj=(Object ) it.next();
sysout-> m.get(obj) //V 值
//K==>V
}
//Iterator<Entry<E,E>> it=en.iterator();
//while(it.hasNext()){
// Map.Entry<E,E> e=it.next();
// sys->e.getKey();
// Sys->e.getValue();
//}
Iterator it= e.iterator();
while(it.hasNext()){
sys->it.next()
}