List
和Set
都是接口。它们都扩展了Collection
接口。在这篇文章中,我们讨论了 java 中List
和Set
接口之间的差异。
List
Vs Set
1)List
是一个有序集合,它维护插入顺序,这意味着在显示列表内容时,它将按照它们插入列表的顺序显示元素。
Set
是一个无序集合,它不保持任何顺序。 维护顺序的Set
很少,例如LinkedHashSet
(它按插入顺序维护元素)。
2)List
允许重复,而Set
不允许重复元素。如果您尝试将重复元素插入Set
中,它将替换现有值,则Set
的所有元素都应该是唯一的。
3)List
实现: ArrayList
, LinkedList
等。
Set
实现: HashSet
, LinkedHashSet
, TreeSet
等。
4)List
允许任意数量的空值。 Set
最多只能有一个空值。
5) ListIterator
可用于在两个方向(前向和后向)遍历List
但是它不能用于遍历Se
。我们可以使用迭代器(它也适用于List
)来遍历一个Set
。
6)List
接口有一个名为Vector
的遗留类,而Set
接口没有任何遗留类。
何时使用Set
和何时使用List
?
用法完全取决于要求:
如果要求只有唯一值,那么Set
是您最好的选择,因为Set
的任何实现仅维护唯一值。
如果需要维持插入顺序而不管双重性,则List
是最佳选择。List
接口的实现 – ArrayList
和LinkedList
按其插入顺序对元素进行排序。
列表示例
import java.util.List;
import java.util.ArrayList;
import java.util.LinkedList;
public class ListExample {
public static void main(String[] args) {
List<String> al = new ArrayList<String>();
al.add("Chaitanya");
al.add("Rahul");
al.add("Ajeet");
System.out.println("ArrayList Elements: ");
System.out.print(al);
List<String> ll = new LinkedList<String>();
ll.add("Kevin");
ll.add("Peter");
ll.add("Kate");
System.out.println("\nLinkedList Elements: ");
System.out.print(ll);
}
}
输出:
ArrayList Elements:
[Chaitanya, Rahul, Ajeet]
LinkedList Elements:
[Kevin, Peter, Kate]
设置示例
import java.util.Set;
import java.util.HashSet;
import java.util.TreeSet;
public class SetExample {
public static void main(String args[]) {
int count[] = {11, 22, 33, 44, 55};
Set<Integer> hset = new HashSet<Integer>();
try{
for(int i = 0; i<4; i++){
hset.add(count[i]);
}
System.out.println(hset);
TreeSet<Integer> treeset = new TreeSet<Integer>(hset);
System.out.println("The sorted list is:");
System.out.println(treeset);
}
catch(Exception e){
e.printStackTrace();
}
}
}
输出:
[33, 22, 11, 44]
The sorted list is:
[11, 22, 33, 44]