Set<E>接口和List<E>接口的根本区别是什么?
当前回答
嗨,已经给出了这么多答案,让我指出一些到目前为止没有提到的地方:
大多数的List实现(ArrayList,Vector)实现了RandomAccess接口,这是一个快速访问的标记接口。Set的实现都没有这样做。 List使用一个特殊的迭代器,称为ListIterator,它支持双向迭代。Set使用只支持单向迭代的迭代器 HashSet占用的内存是ArrayList的5.5倍 相同数量的元素。
其他回答
这里有一个关于groovy的明确例子。我创建了一个集合和一个列表。 然后我尝试在每个列表中存储20个随机生成的值。生成的值范围为0 ~ 5
s = [] as Set
l = []
max = 5
print "random Numbers :"
20.times{
e = (int)Math.random()*max
s << e
l << e
print "$e, "
}
println "\n"
println "Set : $s "
println "list : $l
结果:
随机数:4,1,4,0,1,2,4,0,0,0,3,4,2,0,4,4,0,4,0,0,1,3,1,3
集合:[4,1,0,2,3]
列表:[4 1 4 0,1,2,4,0,0,3、4、3、2 0 4 0,1,3,1,3)
你可以看到区别在于:
Set不允许重复值。 列表允许重复值。
订购…列表有顺序,集合没有。
设置: Set的集合中不能有Duplicate元素。它也是一个无序集合。要从Set中访问数据,只需要使用Iterator,基于索引的检索是不可能的。它主要用于需要唯一性收集的时候。
列表: List可以有重复的元素,插入时使用自然顺序。 因此,它可以基于索引或迭代器检索数据。它广泛用于存储需要基于索引进行访问的集合。
List | Set | |
---|---|---|
Duplicates | Yes | No |
Order | Ordered | Depends on implementation |
Position Access | Yes | No |
List和Set都是接口。它们都扩展了Collection接口。set和list之间的重要区别是:
复制对象
List和Set之间的主要区别是List允许重复,而Set不允许重复。
订单
List是一个有序的集合,它维护插入顺序,这意味着在显示列表内容时,它将以它们插入到列表中的相同顺序显示元素。
Set是一个无序的集合,它不维护任何顺序。很少有维护顺序的Set实现,例如LinkedHashSet(它按照插入顺序维护元素)。
空元素
List允许任意数量的空元素。Set最多只能有一个null元素。
推荐文章
- 杰克逊克服下划线,支持骆驼案
- 如何分裂()一个分隔字符串到一个列表<字符串>
- List、List<?>, List<T>, List<E>, List<Object>
- 在Java中转换字符串到日历对象
- c#对象列表,我如何得到一个属性的和
- 在java中使用wait()和notify()的简单场景
- 增强的for循环中的Null检查
- c# vs Java Enum(适合c#新手)
- 如何在不强制转换的情况下将double转换为long ?
- for循环和for-each循环在性能上有区别吗?
- 你如何比较两个版本的字符串在Java?
- 为什么在Java和。net中不能修改字符串?
- java.util.Random真的那么随机吗?我怎么能生成52!(阶乘)可能的序列?
- ZoneOffset之间的区别是什么。UTC和ZoneId.of(“UTC”)?
- 类未找到:IntelliJ中的空测试套件