java集合知識點總結


下面是java中常見的集合:

List--列表:內部元素有序,可以重復,

  ArrayList:線程不安全,效率高。數據結構是線性表,底層結構是順序表,也就是數組,有唯一的下標來指定元素的位置,查詢快,增刪慢。

  Vector:類似於ArrayList,但是線程安全,代價就是效率低。完全可以用ArrayList來替代,

  

List<String> list = Collections.synchronizedList(new ArrayList<String>())
View Code

      上面代碼就是將ArrayList改為線程安全的,其余的操作基本和原本一樣。

  LinkedList:線程不安全,效率高。數據結構是線性表,底層結構是單鏈表,查詢慢,但是增刪快

Set--集合:內部元素無序,不可重復

  HashSet:線程不安全,效率高。數據結構是哈希表,底層結構是順序表,LinkedHashSet的底層結構是單鏈表,具體類比ArrayList,

  TreeSet:線程不安全,效率高。數據結構是紅黑樹,和HashSet的區別在於,它的元素是有序的,而這里的有序和我們在List談到的有序不是一個意思,List中的有序是指你輸入["gol","long","xiao"],在存儲的時候下標0對應的就是"gol",下標1對應的就是"long",而這里的有序指的是元素在存儲時自己遵守的一套規則,因為本身元素是不可重復的,和我們的添加順序沒有關系,比如我們輸入[3,2,1],在存儲是就會變為[1,2,3],按照1,2,3這個規則來排序,如果想得到類似於list的那種有序,LinkedHashSet可以實現。

Map--字典:通過“鍵”尋找“值”

  HashMap:線程不安全,效率高。數據結構是哈希表,底層結構是順序表,LinkedHashMap的底層結構是單鏈表,具體類比ArrayList

  TreeMap:線程不安全,效率高。數據結構是紅黑樹,可以存儲 null 值

  HashTable:線程安全,效率低。數據結構是哈希表,不能存儲 null 值

迭代器(iterator)遍歷

  list可以通過索引取值遍歷,map可以通過鍵值,那set要怎么遍歷呢?其實map的鍵的集合就是一個set,我們不處理怎么遍歷set的問題就無法查看set和map中的值了,於是就有了迭代器

        HashSet set = new HashSet<>();
        set.add(99);
        set.add(100);
        set.add("gol");
        Iterator it = set.iterator();
        while (it.hasNext()){
            System.out.println(it.next());
        }

  迭代器就是一種提取集合中數據的接口,我們只需要對集合調用iterator()方法生成一個迭代器集合,而其內部如何生成對我們隱藏了,在迭代器中修改原集合的會觸發ConcurrentModificationException(並發修改異常),也就是說在迭代器中不要進行修改(修改元素的值可以的,只要沒有改變原集合的長度)的操作,會出錯。若想在迭代的時候修改長度,List集合特有的listIterator()方法可以實現,(但僅僅是List有此方法)

  而增強for循環就是在底層封裝了迭代器,所有同樣存在並發修改異常

    HashSet<Integer> set = new HashSet<>();
        set.add(99);
        set.add(100);
        set.add(98);for (Integer s:set){
            System.out.println(s);
        }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM