本文正在参加「Java主题月 - Java Debug笔记活动」,详情查看<活动链接>
问题
Set<E>
和 List<E>
接口之间的根本区别是什么?
回答
回答1
List
是一个有序的列表,而 Set
是一个无序的列表。
List<E>
:
有序集合(也称为序列),使用该接口可以精确控制列表中每个元素的插入位置。可以通过其索引(列表中的位置)访问元素,并在列表中搜索元素。
Set<E>
:
不包含重复元素的集合。更精确地说,集合中不包含元素 e1
和 e2
,使得e1.equals(e2)
,并且最多包含一个空元素。
回答2
有序列表(唯一或不唯一),实现接口 List
,可以通过索引访问.
实现:
LinkedList
ArrayList
唯一元素的列表,实现接口 Set
, 可以不通过索引访问。
实现:
HashSet
(无序)LinkedHashSet
(有序)TreeSet
(按自然顺序或提供的比较器排序)
这两个接口 Set
和 List
实现于 Collection
。
回答3
List :
- 是元素的有序分组。
- 用于收集具有重复项的元素。
- 在List接口中有定义的新方法。
set:
- 是元素的无序分组。
Set
用于收集没有重复的元素。Set
接口内部没有定义新方法,因此我们仅需对Set
子类使用Collection
接口方法。
回答4
List:
List
允许重复的元素和空值。使用元素的相应索引易于搜索,并且它将按插入顺序显示元素。
示例:(LinkedList
)
import java.util.*;
public class ListExample {
public static void main(String[] args) {
// TODO Auto-generated method stub
List<Integer> l=new LinkedList<Integer>();
l.add(001);
l.add(555);
l.add(333);
l.add(888);
l.add(555);
l.add(null);
l.add(null);
Iterator<Integer> il=l.iterator();
System.out.println(l.get(0));
while(il.hasNext()){
System.out.println(il.next());
}
for(Integer str : l){
System.out.println("Value:"+str);
}
}
}
输出:
1
1
555
333
888
555
null
null
值:1
值:555
值:333
值:888
值:555
值:null
值:null
Set:
Set
不允许任何重复的元素,并且允许单个 null
值,它不能保证任何显示元素的顺序,仅TreeSet
可以以升序显示。
示例:(TreeSet
)
import java.util.TreeSet;
public class SetExample {
public static void main(String[] args) {
// TODO Auto-generated method stub
TreeSet<String> set = new TreeSet<String>();
try {
set.add("hello");
set.add("world");
set.add("welcome");
set.add("all");
for (String num : set) {
System.out.println( num);
}
set.add(null);
} catch (NullPointerException e) {
System.out.println(e);
System.out.println("Set doesn't allow null value and duplicate value");
}
}
}
输出:
all
hello
welcome
world
java.lang.NullPointerException
Set doesn't allow null value and duplicate value
翻译内容来源Stack Overflow:stackoverflow.com/questions/1…