zoukankan      html  css  js  c++  java
  • 【大数据开发工程师】面试——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不能重复。

  • 相关阅读:
    【关键字】
    【选择结构语句:switch】
    【数据类型】
    【接口】
    【抽象类和接口的区别】
    【访问权限】
    【内部类】
    【方法】
    【this 关键字】
    【Static】
  • 原文地址:https://www.cnblogs.com/lintong-zf/p/14230374.html
Copyright © 2011-2022 走看看