首頁 >Java >java教程 >java中集合的差別是什麼?

java中集合的差別是什麼?

青灯夜游
青灯夜游原創
2019-11-18 17:49:074892瀏覽

java中集合的差別是什麼?

java中集合的差異是什麼?

在java中集合主要分為:List,Set,Map三種,其中List與Set是繼承自Collection,而Map不是。

List與Set的差異:List中的元素有存放順序,並且可以存放重複元素,檢索效率高,插入刪除效率低,Set沒有存放順序,而且不可以存放重複元素,後來的元素會把前面重複的元素替換掉,檢索效率低,插入刪除效率高。 (Set儲存位置是由它的HashCode碼決定的,所以它儲存的物件必須有equals()方法,而且Set遍歷只能用迭代,因為它沒有下標。)

##1 、最常用的集合:ArrayList

特點:ArrayList集合中元素儲存的位置是連續的,所以查詢起來會比較快捷,但是執行插入刪除操作會比較麻煩一點,會引起其他元素位置的變化。

注意:list中儲存的是物件的引用,而不是物件本身。如果不清楚這一點會在這裡有個坑,例如:

有人為了節省優化程式碼,節省虛擬機器記憶體會這麼寫程式碼:

List<List<String>> list=new ArrayList<>();
List<String> list2=new ArrayList<>();
for(int i=0;i<10;i++){
    list2.add(""+i);    
    list.add(list2);
    list2.clear();
}

這樣寫雖然可以一個物件重複使用,但是,list儲存的是物件的引用,當list2.clear();的時候,list中的list2也會clear,這樣最後得到的就只能是一堆空的集合了。

2、與最常用集合相反的集合:LinkedList

LinkedList與ArrayList是互補的,所以ArrayList的優點就是LinkedList的缺點,ArrayList的缺點就是LinkedList的優點。

特點:LinkedList中元素位置是任意的,所以執行插入刪除操作效率較高,查詢效率較低。

3、與一般集合都相反的集合:Vector

為什麼說它與一般集合都相反呢?因為它是一種老的動態數組,很多方法都用synchonized修飾,所以它是線程安全得,而一般集合是線程不安全得。

特點:多個執行緒同時存取不會發生不確定的結果,但是它的效率會比較低,如果要考慮執行緒安全的話可以用它。

4、Set中最常使用的集合:HashSet

在用Set集合的時候我幾乎用的都是HashSet,HashSet是使用Hash表實現的,集合裡面的元素是無序得,可以有null值,但不能有重複元素。

特點:因為相同的元素有相同的hashCode,所以不能有重複元素

5、Set中第二常用的集合:TreeSet

TreeSet是用二元樹結構實現的集合

特點:集合中的元素是有順序得,不允許放入null,同樣不能放入重複元素。

6、第二常用的集合:HashMap

經常遇到需要使用鍵值對儲存的場景,而HashMap是用得最多的一種鍵值對儲存的集合。

特點:HashMap允許空鍵值,而且它是非執行緒安全的,所以插入、刪除和定位元素會比較快。

7、一些不太常用的Map集合:TreeMap,HashTable

#TreeMap是基於紅黑樹實現的,適用於按自然順序火茲定於順序遍歷key。

HashTable是基於HashCode實現的,但它是執行緒安全的,所以會比HashMap效率低,而且不允許null值。

推薦教學:

Java教學

以上是java中集合的差別是什麼?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn