本質上來說,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());
運行結果:
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());
運行結果:
#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中文網其他相關文章!