HashSet和Set有什么区别?
看到代码片段
Set<Record> instances = new HashSet<Record>();
我想知道Hashset是否是一种特殊的集合。 他们之间的任何区别?
一个Set
表示一个通用的“一组值”。 TreeSet
是元素sorting(因此sorting)的集合, HashSet
是元素不sorting或sorting的集合。
HashSet
通常比TreeSet
快很多。
TreeSet
通常以红黑树的forms实现(请参见http://en.wikipedia.org/wiki/Red-black_tree-我没有validationsun / oracle的TreeSet
的实际实现),而HashSet
使用Object.hashCode()
在数组中创build一个索引。 红黑树的访问时间为O(log(n))
而HashSet
访问时间从恒定时间到最差情况(每个项目具有相同的散列码),可以有一个线性search时间O(n)
。
HashSet
是Set
一个实现。
这个问题已经得到解答,但是我还没有看到为什么代码在相同的代码中提到两种types的答案。
通常情况下,您想要针对在这种情况下设置的接口进行编码。 为什么? 因为如果你总是通过接口引用你的对象(除了新的HashSet()),那么稍后改变对象的实现是微不足道的,如果你发现这样做会更好,因为你只在代码中提到过一次基地(你做了新的HashSet())。
Set是类集合的一般接口,而HashSet是Set接口(使用哈希代码,因此名称)的特定实现。
Set是TreeSet,LinkedHashSet等所有集合类的父接口
HashSet是一个实现Set接口的类。
我想你应该阅读HashSet的javadoc