首頁 >Java >Java基礎 >Java Collection中set與list介面的差別

Java Collection中set與list介面的差別

王林
王林原創
2019-11-25 11:04:373578瀏覽

Java Collection中set與list介面的差別

本質上來說,List和Set都是接口,且繼承了Collection介面。我們常用到的ArrayList、HashSet分別是繼承了List和Set接口,由於用到了泛型,在實際運用時可以指定實際的型別來使用。通常我們用它們來儲存對象,當然用的比較多的還有Map,它們都提供了插入、刪除和查找的接口,且支援使用Iterator。那麼,List和Set究竟有什麼差別,在使用過程中又該如何區分呢?

List和Set區別

(1)List和Set之間很重要的一個差異是是否允許重複元素的存在,在List中允許插入重複的元素,而在Set中不允許重複元素存在,即使插入相同元素也會進行替換。我分別對ArrayList和HashSet插入相同元素進行了驗證:

HashSet<String> hset = new HashSet<String>();
ArrayList<String> arrlst = new ArrayList<String>();
 
hset.add("hello");
hset.add("hello");
 
arrlst.add("hello");
arrlst.add("hello");
 
System.out.println("hset size: "+hset.size()+" toString: "+hset.toString());
System.out.println("arrlst size: "+arrlst.size()+" toString: "+arrlst.toString());

運行結果:

Java Collection中set與list介面的差別

PS:看JDK原始碼會看到HashSet的實現是透過HashMap來完成的。

java學習影片推薦:java入門

(2)List與Set之間另一個很重要的差異與元素先後存放順序有關。 List是有序集合,而Set是無序集合。 List會保留元素插入時的順序,也就是說之前插入的元素的索引會比之後插入的元素的索引要小。而Set不會保留插入時的順序。同樣,來驗證一下:

HashSet<String> hset = new HashSet<String>();
ArrayList<String> arrlst = new ArrayList<String>();
 
hset.add("1");
hset.add("3");
hset.add("2");
 
arrlst.add("1");
arrlst.add("3");
arrlst.add("2");
 
System.out.println("hset size: "+hset.size()+" toString: "+hset.toString());
System.out.println("arrlst size: "+arrlst.size()+" toString: "+arrlst.toString());

運行結果:

Java Collection中set與list介面的差別

#PS:ArrayList中使用物件數組來儲存對象,每次插入新的物件時會插入到size大小處;至於HashSet,前面說到是透過HashMap來實現的,存入的物件作為HashMap的key,如果key相同會取代value。當然,SortedSet(繼承了Set介面)能夠以指定的排序方式來保存元素。

(3)List可以透過下標來訪問,而Set不能。

List介面常見實作類別有ArrayList、Vector和LinkedList,而Set介面常見實作類別有HashSet、TreeSet和LinkedHashSet。

更多java相關文章推薦:java入門教學

#

以上是Java Collection中set與list介面的差別的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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