Java中的集合與列表
瀏覽人數:377最近更新:
一、概述
在本教程中,我們將藉助一個簡單的示例來討論 Java 中Set
和List
之間的區別。
2. 概念差異
List
和Set
都是 Java Collections
的成員。但是,有一些重要的區別:
-
List
可以包含重複項,但Set
不能 -
List
將保留插入順序,但Set
可能會也可能不會 - 由於插入順序可能不會在
Set
中維護,因此它不允許像在List
中那樣進行基於索引的訪問
請注意,有一些Set
接口的實現保持順序,例如LinkedHashSet
。
3. 代碼示例
3.1。允許重複
List
允許添加重複項。但是,它不適用於Set
:
@Test
public void givenList_whenDuplicates_thenAllowed(){
List<Integer> integerList = new ArrayList<>();
integerList.add(2);
integerList.add(3);
integerList.add(4);
integerList.add(4);
assertEquals(integerList.size(), 4);
}
@Test
public void givenSet_whenDuplicates_thenNotAllowed(){
Set<Integer> integerSet = new HashSet<>();
integerSet.add(2);
integerSet.add(3);
integerSet.add(4);
integerSet.add(4);
assertEquals(integerSet.size(), 3);
}
3.2.維護廣告訂單
一個Set
根據實現維護順序。例如, HashSet
不能保證保持順序,但LinkedHashSet
可以。讓我們看一個使用LinkedHashSet
進行排序的示例:
@Test
public void givenSet_whenOrdering_thenMayBeAllowed(){
Set<Integer> set1 = new LinkedHashSet<>();
set1.add(2);
set1.add(3);
set1.add(4);
Set<Integer> set2 = new LinkedHashSet<>();
set2.add(2);
set2.add(3);
set2.add(4);
Assert.assertArrayEquals(set1.toArray(), set2.toArray());
}
由於不能保證Set
保持順序,因此無法對其進行索引。
4。結論
在本教程中,我們看到了 Java 中List
和Set
之間的區別。
源代碼可在 GitHub 上獲得。
本作品係原創或者翻譯,採用《署名-非商業性使用-禁止演繹4.0國際》許可協議