【大数据开发工程师】面试——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不能重复。