1. 程式人生 > >集合泛型

集合泛型

算法 取值 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); } }

集合泛型