【大数据开发工程师】面试——JAVA题之HashSet

HashSet

作用:保证数据的唯一。

public class HashSet<E>
extends AbstractSet<E>
implements Set<E>, Cloneable, java.io.Serializable
{
  private transient HashMap<E,Object> map;//底层维护了一个HashMap实例
}

实现了Set接口,不允许出现重复元素。不保证集合中元素的顺序,允许包含值为null的元素,但最多只能一个。

HashSet有序吗?

HashSet不保证集合中元素的个数,但是特定情况下会出现有序的情况。也就是当写入到HashSet中的数据都是Integer,且小于65535时,HashSet有序。

这是因为Integer类重写了hashcode,所以Integer的hashcode是其本身。

public Integer(int value) {
this.value = value;
}
@Override
public int hashCode() {
return Integer.hashCode(value);
}

public static int hashCode(int value) {
return value;
}
HashMap计算hash的公式是:
  (key == null) ? 0 : (h = key.hashCode()) ^ (h >>> 16)



以上可以得知,Iteger计算得到的hash值是其本身。

HashSet怎么保证唯一性?

HashSet底层维护了一个HashMap,HashMap的Key不能重复。

原文地址:https://www.cnblogs.com/lintong-zf/p/14230374.html