集合泛型
阿新 • • 發佈:2018-03-09
算法 取值 lin key treeset static hset next() iterator
Collection 接口 用父類引用指向子類對象
List(存取有序,有索引,可以重復)
ArrayList底層是數組實現的,線程不安全,查找和修改快,增和刪比較慢
LinkedList底層是鏈表實現的,線程不安全,增和刪比較快,查找和修改比較慢
Vector底層是數組實現的,線程安全的,無論增刪改查都慢
如果查找和修改多,用ArrayList
如果增和刪多,用LinkedList
如果都多,用ArrayList
Set(存取無序,無索引,不可以重復)
HashSet 底層是哈希算法實現。線程不安全,存取速度快。
LinkedHashSet 底層是鏈表實現,但是也是可以保證元素唯一,和HashSet原理一樣
TreeSet 底層是二叉樹算法實現 一般在開發的時候不需要對存儲的元素排序,所以在開發的時候大多用HashSet,HashSet的效率比較高
TreeSet在面試的時候比較多,問你有幾種排序方式,和幾種排序方式的區別
Map
HashMap底層是哈希算法,針對鍵線程不安全,存取速度快。可以最多一個為空
LinkedHashMap底層是鏈表,針對鍵
TreeMap底層是二叉樹算法,針對鍵。默認根據鍵排序
Hashtable它不允許記錄的鍵或者值為空;它支持線程的同步,即任一時刻只有一個線程能寫Hashtable,因此也導致了Hashtale在寫入時會比較慢
附:map 遍歷的四種方法: public static void main(String[] args) { Map<String, String> map = new HashMap<String, String>(); map.put("1", "value1"); map.put("2", "value2"); map.put("3", "value3"); //第一種:普遍使用,二次取值 System.out.println("通過Map.keySet遍歷key和value:"); for (String key : map.keySet()) { System.out.println("key= "+ key + " and value= " + map.get(key)); } //第二種 System.out.println("通過Map.entrySet使用iterator遍歷key和value:"); Iterator<Map.Entry<String, String>> it = map.entrySet().iterator(); while (it.hasNext()) { Map.Entry<String, String> entry = it.next(); System.out.println("key= " + entry.getKey() + " and value= " + entry.getValue()); } //第三種:推薦,尤其是容量大時 System.out.println("通過Map.entrySet遍歷key和value"); for (Map.Entry<String, String> entry : map.entrySet()) { System.out.println("key= " + entry.getKey() + " and value= " + entry.getValue()); } //第四種 System.out.println("通過Map.values()遍歷所有的value,但不能遍歷key"); for (String v : map.values()) { System.out.println("value= " + v); } }
集合泛型