java HashSet和Set有什么区别?

v2g6jxz6  于 2023-04-04  发布在  Java
关注(0)|答案(8)|浏览(161)

看到了类似于

Set<Record> instances = new HashSet<Record>();

我想知道Hashset是否是一种特殊的集合。它们之间有什么区别吗?

prdp8dxp

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)

2o7dmzc5

2o7dmzc53#

这个问题已经得到了回答,但是我还没有看到为什么代码在同一代码中提到这两种类型的答案。
通常情况下,你想对接口进行编码,在本例中是Set。为什么?因为如果你总是通过接口引用你的对象(除了new HashSet()),那么如果你发现这样做更好,那么以后改变对象的实现是微不足道的,因为你只在代码库中提到过一次(在那里你做了new HashSet())。

5gfr0r5j

5gfr0r5j4#

Set是类集合的通用接口,而HashSet是Set接口的特定实现(它使用哈希码,因此得名)。

ssm49v7z

ssm49v7z5#

Set是所有set类(如TreeSet、LinkedHashSet等)的父接口。
HashSet是一个实现Set接口的类。

j2datikz

j2datikz6#

HashSet是一个从Set接口派生出来的类。作为Set的派生类,HashSet获得了Set的属性。Set的重要和最常用的派生类是HashSet和TreeSet。

vatpfxk5

vatpfxk57#

**

  • 设置:
    **接口是Collection接口的子类型,与LIST、QUEUE一样。

Set有3个以下的子类,它用于存储多个对象而不重复。
1.哈希集
1.链接哈希集

  1. TreeSet(实现SortedSet接口)

**

  • HashSet:
    **

可以使用一个NULL值(因为不允许重复),数据随机存储,因为它不保持序列。

kzipqqlq

kzipqqlq8#

Set为接口。
HashSet是Set的一个实现,除了HashSet之外,还有很多类实现了Set
Set可以是以下之一

ConcurrentSkipListSet
CopyOnWriteArraySet 
EnumSet 
TreeSet 
HashSet
LinkedHashSet

包括HashSet及其实现。
HashSet只能是以下之一

LinkedHashSet
JobStateReasons

相关问题