1. 程式人生 > >Java集合面試題(02) Java中List和Set之間區別

Java集合面試題(02) Java中List和Set之間區別

本文為本博主翻譯,未經允許,嚴禁轉載!

簡介

Java中List和Set之間有什麼區別是一個非常流行的Java集合面試問題,也是在Java中使用Collection類時要記住的一個重要的基本概念。 List和Set都是Java程式最重要的Collection類中的兩個,以及各種Map實現。 List和Set的基本特徵在Java的List和Set介面中被抽象出來,然後List和Set的各種實現都在相應介面之上增加了特定的特徵。例如,Java中的ArrayList是由Array支援的List實現,而LinkedList是另一個像連結列表資料結構一樣工作的List實現。在這個Java教程中,我們將看到List和Set集合之間的一些根本區別。由於List和Set在Java5泛型的引入中被泛化,所以這些差別同樣適用於List和Set。

這篇文章是我之前關於Collection的文章的延續,例如HashMap與HashSet之間的區別HashMap與Hashtable之間的差異以及Concurrent Collection與Synchronized Collection之間的區別。如果你還沒有閱讀,可能會發現它們很有用。

Java中List vs Set

在Java中,關於List和Set, 這裡有幾個值得注意的差異。請記住,它們都用於儲存物件,並提供方便的API來插入,刪除和檢索元素,以及支援迭代。
1)List和Set在Java中的基本區別是允許重複的元素。 Java中的列表允許重複,而Set不允許任何重複。如果您在Set中插入重複項,則會替換舊值。 Java中Set的任何實現都只包含唯一的元素。
2)List和Set之間的另一個顯著的差異是順序。列表是有序集合,而集合是無序集合。列表維護元素的插入順序,意味著之前插入的任何元素都會比之後插入的任何元素的索引要小。在Java中Set不保持任何順序。儘管Set提供了另一個稱為SortedSet的替代方法,它可以按照Set中儲存的Object的Comparable和Comparator方法定義的特定排序順序儲存Set元素。
3)Set使用equals()方法來檢查儲存在Set中的元素的唯一性,而SortedSet使用compareTo()方法來實現元素的自然排序順序。為了使元素在Set和SortedSet中正常工作,equals和compareTo必須相互一致。
4)Java中List介面的流行實現包括ArrayList,Vector和LinkedList。 Set介面的流行實現包括HashSet,TreeSet和LinkedHashSet。

Java中使用List和Set

另一個好的後續問題是“Java中什麼時候使用List和Set”,這也可以根據List和Set的屬性來回答,我們已經在這裡學習了。Set和List之間的區別也告訴我們什麼時候使用Set和何時更喜歡List。它非常清楚,如果你需要維護插入順序或你的集合可以包含重複的元素,你需要選擇List。另一方面,如果你的要求是保持獨特的集合,並且沒有任何重複,你可以選擇Set。

重要的一點是List和Set都是從Collection介面派生的。簡而言之,List和Set之間在Java中的主要區別在於List是一個允許重複的有序集合,而Set是一個不允許重複的無序集合。

原文連結