本文正在参加「Java主题月 - Java Debug笔记活动」,详情查看<活动链接>
问题
Set<E> 和 List<E> 接口之间的根本区别是什么?
回答
回答1
List 是一个有序的列表,而 Set 是一个无序的列表。
List<E>:
有序集合(也称为序列),使用该接口可以精确控制列表中每个元素的插入位置。可以通过其索引(列表中的位置)访问元素,并在列表中搜索元素。
Set<E>:
不包含重复元素的集合。更精确地说,集合中不包含元素 e1 和 e2,使得e1.equals(e2),并且最多包含一个空元素。
回答2
有序列表(唯一或不唯一),实现接口 List,可以通过索引访问.
实现:
LinkedListArrayList
唯一元素的列表,实现接口 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…