一、list、set
list、set的父類是collection,collection的父類是Iterator
List:有序可重複集合
①、List list1 = new ArrayList();
底層數據結構是數組,查詢快,增刪慢;線程不安全,效率高
②、List list2 = new Vector();
底層數據結構是數組,查詢快,增刪慢;線程安全,效率低,幾乎已經淘汰了這個集合
③、List list3 = new LinkedList();
底層數據結構是鏈表,查詢慢,增刪快;線程不安全,效率高
Set:查看HashSet的源碼,HashSet集合就是HashMap的key組成
- HashSet:不能保證元素的順序;不可重複;不是線程安全的;集合元素可以爲 NULL;其底層是一個數組,加快查詢效率,index = hash(value);
對於 HashSet: 如果兩個對象通過 equals() 方法返回 true,這兩個對象的 hashCode 值也應該相同;如果 hashCode 值相同,那麼會繼續判斷該元素和集合對象的 equals() 作比較
hashCode 相同,equals 爲 true,則視爲同一個對象,不保存在 hashSet()中
hashCode 相同,equals 爲 false,則存儲在之前對象同槽位的鏈表上。
- Set linkedHashSet = new LinkedHashSet(); 不可重複有序集合,不是線程安全的
因爲底層採用 鏈表 和 哈希表的算法。鏈表保證元素的添加順序,哈希表保證元素的唯一性
- Set treeSet = new TreeSet();不可重複有序集合,不是線程安全的
底層使用紅黑樹算法,擅長於範圍查詢
如果使用 TreeSet() 無參數的構造器創建一個 TreeSet 對象, 則要求放入其中的元素的類必須實現 Comparable 接口所以, 在其中不能放入 null 元素;必須放入同樣類的對象.(默認會進行排序) 否則可能會發生類型轉換異常.我們可以使用泛型來進行限制
二、map
map兩個集合之間 的映射關係,key-value鍵值對的形式,Map沒有實現Collection接口
1、通過 map.values() 方法得到 Map 中的 value 集合
Collection<Object> value = hashMap.values();
2、通過 map.keySet() 得到 Map 的key 的集合,然後 通過 get(key) 得到 Value
Set<String> set = hashMap.keySet();
3、通過 Map.entrySet() 得到 Map 的 Entry集合,然後遍歷
Set<Map.Entry<String, Object>> entrys = hashMap.entrySet();
for(Map.Entry<String, Object> entry: entrys){
String key = entry.getKey();
Object value2 = entry.getValue();
System.out.println(key+"="+value2);
}
Map實現類 |
說明 |
HashMap |
採用Hash表算法,Map中的key不保證添加的先後順序,key也不允許重複,判斷key重複的條件是equals爲true並且HashCode值相等 |
LinkedHashMap |
採用鏈表和Hash算法,Map中的key會按照自然順序進行排序,key不允許重複,key的重複的判斷標準和HashMap |
TreeMap |
採用紅黑樹算法,Map中的key會按照自然順序或定製排序進行排序,key不允許重複,判斷key重複的條件是compareTo或者compare的返回值是否爲0 |
Hashtable |
採用Hash算法,是HashMap的前身(類似於Vector是ArrayList的前身),是繼承Dictionary類然後再實現Map,線程安全的,性能比較低,已經棄用 |
Propertise |
HashTable的子類,要求key和value都是String類型,用來加載資源文件(propertise文件) |