Set
接口
無序,元素唯一
HashSet
數據結構:哈希表
不同步
如何保證元素的唯一性:
1, 獲取哈希值:添加的自定義對象需要覆蓋hashCode()方法,寫自己的哈希值獲取方法。
2, 判斷對象內容:覆蓋equals()方法,提供自身判斷對象是否相等的方法。
容器在添加對象時,會自動調用hashCode和equals方法。
TreeSet
數據結構:二叉樹
不同步
對元素進行排序。
如何排序的?
排序方法一:
讓元素具備比較性。
添加的自定義對象需要實現Comparable 接口,並覆蓋compareTo()方法。
compareTo方法返回值有三個:正、 負 、0 ;(大於、小於、等於指定對象)
如果相等,則不能添加到容器。(保證元素的唯一性)
排序方法二:
比較器:讓TreeSet集合在初始化時就具備比較性。
創建一個類實現Comparator接口,覆蓋compare方法。
將這個類對象作爲參數傳遞給TreeSet構造函數。
LinkedHashSet
在哈希表的基礎上加入了鏈表結構,
實現元素唯一性的同時,保證了有序。
Map集合(重點)
獨立的體系
特點:
1,一次存儲一對對象
2,這對對象,左邊叫鍵,右邊叫值,map集合中存儲的都是鍵值對。
3,鍵與值之間有對應關係(映射)。
4,在多鍵值對中,鍵必須保證唯一性。
Collection 和 Map的區別:
Collection:一次存儲一個對象,
Map :一次存儲一對具有映射關係的鍵值對對象。
Map較爲常用,原因:
可以將存儲的對象進行名稱的對應。查找對象時比較方便。
什麼時候使用map集合呢?
分析問題時,如果出現了映射關係時,優先想到map集合
如果關係中一部分是有規律的編號,可以考慮數組。
瞭解Map集合的基本功能
1,添加
value put(key,value);新值覆蓋舊值,返回key對應的原來的值,原來沒有返回null
void putAll(Map)
2,刪除
clear()
value remove(key):返回被移除鍵對應的值
3,判斷
containsKey(key);
containsValue(value)
isEmpty();
4,獲取。
value get(key);通過指定的鍵獲取具體的對應的值。沒有該鍵返回null。
//03---null。
size():
Collection<v> values():獲取map集合中所有的值的集合.
如何獲取map中所有的鍵值對呢?
1,Set<K> keySet()方法:獲取map集合中的所有的鍵。並將這些鍵存儲到一個set集合中。
有了set集合,就有了迭代器。在取出每一個鍵時,
通過map集合的get方法就可以獲取到key對應的值。
Collection是單列集合。Map是雙列集合
爲了便於理解.
Collection裏面存儲的是單身漢.Map集合存儲時夫妻.
Map集合的取出元素的原理:將map集合轉成Set集合.在迭代.
2,Set<Map.Entry<key,value>>entrySet(): 獲取map集合中所有的鍵值關係,並將關係存儲到Set集合中。
這個關係對象的類型就是Map.Entry.
對Set集合進行迭代,迭代出的關係對象,可以通過自己的getKey,getValue方法獲取鍵和值。
Map中常用的對象
三個:
Hashtable:(被HashMap替代)
內部是哈希表結構,
不允許存儲null鍵,null值。
同步
HashMap:
內部是哈希表結構,
允許存儲null鍵、null值
不同步
替代了Hashtable
TreeMap
內部是二叉樹結構
可以對Map集合中的鍵值排序