看到了类似于
Set<Record> instances = new HashSet<Record>();
我想知道Hashset是否是一种特殊的集合。它们之间有什么区别吗?
prdp8dxp1#
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
TreeSet
HashSet
Object.hashCode()
O(log(n))
O(n)
ia2d9nvy2#
HashSet是Set的实现。
2o7dmzc53#
这个问题已经得到了回答,但是我还没有看到为什么代码在同一代码中提到这两种类型的答案。通常情况下,你想对接口进行编码,在本例中是Set。为什么?因为如果你总是通过接口引用你的对象(除了new HashSet()),那么如果你发现这样做更好,那么以后改变对象的实现是微不足道的,因为你只在代码库中提到过一次(在那里你做了new HashSet())。
5gfr0r5j4#
Set是类集合的通用接口,而HashSet是Set接口的特定实现(它使用哈希码,因此得名)。
ssm49v7z5#
Set是所有set类(如TreeSet、LinkedHashSet等)的父接口。HashSet是一个实现Set接口的类。
j2datikz6#
HashSet是一个从Set接口派生出来的类。作为Set的派生类,HashSet获得了Set的属性。Set的重要和最常用的派生类是HashSet和TreeSet。
vatpfxk57#
**
Set有3个以下的子类,它用于存储多个对象而不重复。1.哈希集1.链接哈希集
可以使用一个NULL值(因为不允许重复),数据随机存储,因为它不保持序列。
kzipqqlq8#
Set为接口。HashSet是Set的一个实现,除了HashSet之外,还有很多类实现了Set。Set可以是以下之一
ConcurrentSkipListSet CopyOnWriteArraySet EnumSet TreeSet HashSet LinkedHashSet
包括HashSet及其实现。但HashSet只能是以下之一
LinkedHashSet JobStateReasons
8条答案
按热度按时间prdp8dxp1#
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)
。ia2d9nvy2#
HashSet
是Set
的实现。2o7dmzc53#
这个问题已经得到了回答,但是我还没有看到为什么代码在同一代码中提到这两种类型的答案。
通常情况下,你想对接口进行编码,在本例中是Set。为什么?因为如果你总是通过接口引用你的对象(除了new HashSet()),那么如果你发现这样做更好,那么以后改变对象的实现是微不足道的,因为你只在代码库中提到过一次(在那里你做了new HashSet())。
5gfr0r5j4#
Set是类集合的通用接口,而HashSet是Set接口的特定实现(它使用哈希码,因此得名)。
ssm49v7z5#
Set是所有set类(如TreeSet、LinkedHashSet等)的父接口。
HashSet是一个实现Set接口的类。
j2datikz6#
HashSet是一个从Set接口派生出来的类。作为Set的派生类,HashSet获得了Set的属性。Set的重要和最常用的派生类是HashSet和TreeSet。
vatpfxk57#
**
**接口是Collection接口的子类型,与LIST、QUEUE一样。
Set有3个以下的子类,它用于存储多个对象而不重复。
1.哈希集
1.链接哈希集
**
**
可以使用一个NULL值(因为不允许重复),数据随机存储,因为它不保持序列。
kzipqqlq8#
Set为接口。
HashSet是Set的一个实现,除了HashSet之外,还有很多类实现了Set。
Set可以是以下之一
包括HashSet及其实现。
但HashSet只能是以下之一