集合概述
- Java中的集合是工具類,可以存儲任意數量的具有共同屬性的對象。與數組不同,集合的長度可以動態改變,所以數組適合去存儲固定長度的數據,集合適合去存儲不固定長度的數據。
- 集合的應用場景:
1)無法預測存儲數據的數量。
2)存儲具有一對一關系的數據(比如某件商品,其商品編號只對應這件商品)。
3)需要進行數據的增刪。
4)數據重復問題。
集合框架的體系結構
Collection:(類的對象) 三個子接口:
List:(序列) 有序的、允許重復的 主要實現類:
ArrayList:長度動態增長的數組
Queue:(隊列) 有序的、允許重復的 主要實現類:
LinkedList:鏈表的內容
Set:(集)無序的、不允許重復的 主要實現類:
HashSet:哈希值
Map:(鍵值對)主要實現類:
HashMap:哈希表
List集合
List(列表):
1)元素有序 可重復 -----稱為序列 1223
2)可以 精確 的控制 每個元素的插入位置,或刪除某個位置的元素
3)主要有兩個實現類 ArrayList LinkedList
ArrayList和數組比較相似,不同就是ArrayList存儲個數會動態變動的。
ArrayList:
1)底層是由數組實現的
2)長度 動態增長
3)在列表尾部 插入或刪除數據 非常有效
4)但在列表中間插入數據時會產生大量的元素復制,效率較低,所以更適合 查找與更新新數據
5)元素可以為null值
常用方法使用:
List list = new ArrayList();//導入java.util包
list.add("Java"); //添加數據
list.size(); //列表中元素個數
list.get(int i); //顯示列表中i處元素
list.remove(int index); //移除i處元素
list.remove(Object o); //移除列表中元素
list.contains(Object o); //查詢列表中是否包括某個對象
Set集合
- Set:元素無序並且不可以重復的集合,被稱為集。
- HashSet:
1)元素無序且不可重復,HashSet是Set的一個重要實現類,稱為哈希集;
2)HashSet中只允許有一個null元素;
3)具有良好的存取和查找性能。
4)HashSet中的元素無序並且不可以重復
5)HashSet的底層其實是HashMap。
6)HashSet默認容量是16,默認的加載因子為0.75
什么是加載因子(負載因子/裝載因子)?
用於表示哈希表中元素填滿的程度。
沖突的機會越大,則查找的成本越高。反之,查找的成本越低,從而查找的時間越少。
HashMap中的加載因子
①new HashMap();
初始容量是16,加載因子loadFactor=0.75,默認容量是16*0.75=12
②new HashMap(int initialCapacity);
給定自定義的loadFactor.
③new HashMap(int initialCapacity, fload loadFactor);
自定義初始容量,自定義加載因子。
常用方法
迭代器:Iterator接口可以以統一的方式對各種集合元素進行遍歷
hasNext():檢測集合中是否還有下一個元素
next():返回集合中的下一個元素
把集合添加到迭代器中:(導入包)Iterator 迭代器名=集合名.iterator()方法
遍歷迭代器並輸出:
Map
Map是一個接口,無法進行實例化操作。
可以定義一個引用指向HashMap()的方法構造一個Map類,
添加鍵值對
向Map中添加元素時使用 對象名.put(key, value)的方法添加鍵值對。
遍歷Map
方法一:使用iterator定義一個引用,在指向Map的實例化對象中使用對象名.values()f返回Map類中所有值的內容。
Iterator<String> it = objName.values().iterator();
while (it.hasNext()) {
System.out.println(it.next());
}
方法二:使用指向Map的實例化對象調用 entrySet() 方法,返回一個集合,集合里面包含了Map類當中所有的鍵值對。
Set<Map.Entry<String, String>> entries = objName.entrySet();
for (Map.Entry<String, String> en : entries) {
System.out.print(en.getKey()+"-");;
System.out.println(en.getValue());
}
查找某個key
keySet()方法將map中所有key值的取出,返回值是個只存放key值的Set集合
Set<String> keySet = objName.keySet();
for (String key : keySet) {
if (strSearch.equals(key)) {
System.out.println("找到了!"+"鍵值對為:"+key+"-"+objName.get(key));
break;
}
}
檢查是否存在某個鍵
objName.containsKey(keyName);