Java中的集合與列表
瀏覽人數:494最近更新:
一、概述
在本教程中,我們將藉助一個簡單的示例來討論 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國際》許可協議