【发布时间】:2011-07-05 14:43:20
【问题描述】:
看到了sn-p之类的代码
Set<Record> instances = new HashSet<Record>();
我想知道 Hashset 是否是一种特殊的集合。它们之间有什么区别吗?
【问题讨论】:
-
你可能想看看interfaces的概念
看到了sn-p之类的代码
Set<Record> instances = new HashSet<Record>();
我想知道 Hashset 是否是一种特殊的集合。它们之间有什么区别吗?
【问题讨论】:
Set 代表一个通用的“值集”。 TreeSet 是一个集合,其中元素已排序(并因此排序),HashSet 是其中元素未排序或排序的集合。
HashSet 通常比 TreeSet 快很多。
TreeSet 通常实现为红黑树(请参阅http://en.wikipedia.org/wiki/Red-black_tree - 我尚未验证 sun/oracle 的TreeSet 的实际实现),而HashSet 使用Object.hashCode() 创建数组中的索引。红黑树的访问时间是O(log(n)),而HashSet 的访问时间范围从恒定时间到最坏情况(每个项目都有相同的hashCode),在这种情况下你可以有一个线性搜索时间O(n)。
【讨论】:
【讨论】:
Set 是一个不包含重复元素的集合。 Set是一个接口。
HashSet 实现了Set 接口,由哈希表支持(实际上是HashMap 实例)。
由于HashSet是Set接口的具体实现之一。
ASet 可以是以下任何一个,因为它是由下面的类实现的
ConcurrentSkipListSet:基于ConcurrentSkipListMap 的可扩展并发 NavigableSet 实现。集合的元素会根据其自然顺序或在集合创建时提供的Comparator 进行排序,具体取决于使用的构造函数。
CopyOnWriteArraySet :一个使用内部 CopyOnWriteArrayList 进行所有操作的 Set。
EnumSet :用于枚举类型的专用 Set 实现。枚举集合中的所有元素都必须来自一个枚举类型,该枚举类型在创建集合时显式或隐式指定。
TreeSet :基于 TreeMap 的 NavigableSet 实现。元素使用其自然顺序或在集合创建时提供的 Comparator 进行排序,具体取决于使用的构造函数。
LinkedHashSet:Set 接口的灰表和链表实现,具有可预测的迭代顺序。此实现与 HashSet 的不同之处在于它维护一个双向链表,该列表贯穿其所有条目。
但HashSet 只能是LinkedHashSet,因为LinkedHashSet 子类HashSet
【讨论】:
问题已经得到解答,但我还没有看到为什么代码在同一代码中提到这两种类型的答案。
通常,您希望针对在本例中为 Set 的接口进行编码。为什么?因为如果您总是通过接口引用您的对象(除了 new HashSet()),那么稍后如果您发现更改对象的实现会更好,因为您在代码中只提到过一次基础(你在哪里做了 new HashSet())。
【讨论】:
Set 是类集合集合的通用接口,而 HashSet 是 Set 接口的特定实现(它使用哈希码,因此得名)。
【讨论】:
Set 是 TreeSet、LinkedHashSet 等所有集合类的父接口。
HashSet是一个实现Set接口的类。
【讨论】:
HashSet 是从 Set 接口派生的类。作为 Set 的派生类,HashSet 获得了 Set 的属性。重要且最常用的 Set 派生类是 HashSet 和 TreeSet。
【讨论】:
**
** 它是一个接口,是 Collection 接口的子类型,就像 LIST 和 QUEUE 一样。
Set有以下3个子类,用于存储多个不重复的对象。
**
**
可以使用一个NULL值(因为不允许重复),数据是随机存储的,因为它不保持顺序。
【讨论】: