use*_*949 69 java interface set
看到代码片段就像
Set<Record> instances = new HashSet<Record>();
Run Code Online (Sandbox Code Playgroud)
我想知道Hashset是否是一种特殊的集合.他们之间有什么区别?
Eri*_*rik 84
A Set表示通用的"值集".A TreeSet是元素排序(因此排序)HashSet的集合,a 是元素未排序或排序的集合.
A HashSet通常比a快很多TreeSet.
A TreeSet通常被实现为红黑树(参见http://en.wikipedia.org/wiki/Red-black_tree - 我没有验证sun/oracle的实际实现TreeSet),而a HashSet用于Object.hashCode()创建索引数组.红黑树的O(log(n))访问时间是HashSet从恒定时间到最差情况(每个项目具有相同的hashCode)的访问时间,其中您可以具有线性搜索时间O(n).
vau*_*ham 31
Rav*_*abu 16
Set是一个不包含重复元素的集合。Set 是一个接口。
HashSet实现了该Set接口,由一个哈希表(实际上是一个HashMap实例)支持。
因为HashSet是Set接口的具体实现之一。
ASet可以是以下任何一个,因为它是由以下类实现的
ConcurrentSkipListSet:基于ConcurrentSkipListMap. 集合的元素根据它们的自然顺序进行排序,或者Comparator按照集合创建时提供的顺序进行排序,具体取决于使用的构造函数。
CopyOnWriteArraySet:使用内部 CopyOnWriteArrayList 进行所有操作的 Set。
EnumSet :用于枚举类型的专用 Set 实现。枚举集合中的所有元素都必须来自创建集合时显式或隐式指定的单个枚举类型。
TreeSet:基于 TreeMap 的 NavigableSet 实现。元素使用它们的自然顺序进行排序,或者通过在集合创建时提供的 Comparator 进行排序,具体取决于使用的构造函数。
LinkedHashSet : Set 接口的灰表和链表实现,具有可预测的迭代顺序。此实现与 HashSet 的不同之处在于它维护一个双向链表,贯穿其所有条目。
但HashSet只能是LinkedHashSet因为LinkedHashSet子类HashSet
MeB*_*Guy 14
问题已得到解答,但我没有看到为什么代码在同一代码中提到两种类型的答案.
通常,您希望针对接口进行编码,在本例中为接口.为什么?因为如果你总是通过接口引用你的对象(除了新的HashSet()),那么如果你发现这样做会更好,那么改变对象的实现是微不足道的,因为你在代码中只提到过一次base(你在那里做了新的HashSet()).