zoukankan      html  css  js  c++  java
  • HashSet

      HashSet是Set接口的典型实现,因此不能包含有重复元素。同时也是无序的(这个无序是指遍历HashSet时得到的元素顺序跟add进入的顺序会不一样)。此外元素可以是null,但只能添加一个null元素,并且null元素放在第一位。

      new HashSet()对象其实是new HashMap()对象,初始化一个大小为16的Entry数组,这个通过看HashSet源码可以知道。

      而且通过源码可以知道往HashSet添加元素时为了排除重复元素,HashSet使用了HashMap的键的去重,两者为同一段代码,也即是说原理实现与HashMap的键去重是一样的。需要注意的是:判断两个元素是否相同,先是比较它们的HashCode()返回hashCode值是否相等,并且再通过equals()判断两个对象是否相等。所以需要重写对象的hashCode()和equals(),尽量保证两个对象通过equals()方法比较返回true时,它们的hashCode()方法返回值也相等。

      同时HashSet使用Hash算法存储元素,因此具有良好的存取和查询能力。往HashSet里添加一个元素时,会调用对象重写的HashCode()方法得到该对象的hashCode值。然后根据该hashCode值决定该对象在HashSet中存储的位置。

  • 相关阅读:
    Codeforces 1149 B
    Tenka1 Programmer Contest 2019 D
    BZOJ 1001 [BeiJing2006]狼抓兔子
    Codeforces 741 D
    HDU 5306 Gorgeous Sequence
    HDU 6521 Party
    Codeforces 912A/B
    Educational Codeforces Round 35 B/C/D
    Codeforces 902D/901B
    Codeforces 902B
  • 原文地址:https://www.cnblogs.com/Jin1000x/p/10878170.html
Copyright © 2011-2022 走看看