http://blog.csdn.net/u014033756/article/details/50599879

1、HashSet底层是采用HashMap实现的。HashSet 的实现比较简单,HashSet 的绝大部分方法都是通过调用 HashMap 的方法来实现的,因此 HashSet 和 HashMap 两个集合在实现本质上是相同的。
2、HashMap的key就是放进HashSet中对象,value是Object类型的。
3、当调用HashSet的add方法时,实际上是向HashMap中增加了一行(key-value对),该行的key就是向HashSet增加的那个对象,该行的value就是一个Object类型的常量

  1. HashSet概述
    HashSet实现Set接口,由哈希表(实际上是一个HashMap实例)支持。它不保证set 的迭代顺序;特别是它不保证该顺序恒久不变。此类允许使用null元素。
  2. HashSet的实现
    如果不等,则添加到该数组索引对应的链表中。

 Set的实现类的集合对象中不能够有重复元素,HashSet也一样他是使用了一种标识来确定元素的不重复,HashSet用一种算法来保证HashSet中的元素是不重复的,   HashSet采用哈希算法,底层用数组存储数据。默认初始化容量16,加载因子0.75Object类中的hashCode()的方法是所有子类都会继承这个方法,这个方法会用Hash算法算出一个Hash(哈希)码值返回,HashSet会用Hash码值去和数组长度取模, 模(这个模就是对象要存放在数组中的位置)相同时才会判断数组中的元素和要加入的对象的内容是否相同,如果不同才会添加进去。Hash算法是一种散列算法。

Set hs=new HashSet();

hs.add(o);
|
o.hashCode();
|
o%当前总容量 (0–15)
|
| 不发生冲突
是否发生冲突—————–直接存放
|
| 发生冲突
| 假(不相等)
o1.equals(o2)——————-找一个空位添加
|
| 是(相等)
不添加

   覆盖hashCode()方法的原则:1、一定要让那些我们认为相同的对象返回相同的hashCode值2、尽量让那些我们认为不同的对象返回不同的hashCode值,否则,就会增加冲突的概率。3、尽量的让hashCode值散列开(两值用异或运算可使结果的范围更广)HashSet 的实现比较简单,相关HashSet的操作,基本上都是直接调用底层HashMap的相关方法来完成,我们应该为保存到HashSet中的对象覆盖hashCode()和equals(),因为再将对象加入到HashSet中时,会首先调用hashCode方法计算出对象的hash值,接着根据此hash值调用HashMap中的hash方法,得到的值& (length-1)得到该对象在hashMap的transient Entry[] table中的保存位置的索引,接着找到数组中该索引位置保存的对象,并调用equals方法比较这两个对象是否相等,如果相等则不添加,注意:所以要存入HashSet的集合对象中的自定义类必须覆盖hashCode(),equals()两个方法,才能保证集合中元素不重复。在覆盖equals()和hashCode()方法时, 要使相同对象的hashCode()方法返回相同值,覆盖equals()方法再判断其内容。为了保证效率,所以在覆盖hashCode()方法时, 也要尽量使不同对象尽量返回不同的Hash码值。

如果数组中的元素和要加入的对象的hashCode()返回了相同的Hash值(相同对象),才会用equals()方法来判断两个对象的内容是否相同。

hashset和hashmap有什么关系相关推荐

  1. 1.HashMap_1:什么是HashMap???HashMap有什么特点???HashSet和hashMap之间的关系是什么???HashMap常用方法有八些???

    1.HashMap_1:什么是HashMap???HashMap有什么特点???HashSet和hashMap之间的关系是什么???HashMap常用方法有八些??? 学习:第7遍 1.什么是Hash ...

  2. Java集合 -- HashSet 和 HashMap

    HashSet 集合 HashMap 集合 HashSet集合 1.1 Set 接口的特点 Set体系的集合: A:存入集合的顺序和取出集合的顺序不一致 B:没有索引 C:存入集合的元素没有重复 1. ...

  3. Java集合Set、Map、HashSet、HashMap、TreeSet、TreeMap等

    1.Set和Map的关系: Set代表一种集合元素无序.不可重复的集合,Map代表一种由多个key-value对组成的集合. Set的集合继承体系: Map关系集合 Map集合的key特征:所有key ...

  4. Java集合 HashSet 和 HashMap

    HashSet 集合 HashMap 集合 HashSet集合 Set 接口的特点 Set体系的集合: 存入集合的顺序和取出集合的顺序不一致 没有索引 存入集合的元素没有重复 HashSet 使用&a ...

  5. HashSet和HashMap

    目录 一.HashSet 1.HashSet简单介绍 2.HashSet的常用方法 3.HashSet保证元素不重复的原理 二.HashMap 1.HashMap简单介绍 2.HashMet的常用方法 ...

  6. Java HashSet和HashMap源码剖析

    转载自 Java HashSet和HashMap源码剖析 总体介绍 之所以把HashSet和HashMap放在一起讲解,是因为二者在Java里有着相同的实现,前者仅仅是对后者做了一层包装,也就是说Ha ...

  7. Java面试知识点:集合、Set、泛型、HashSet、HashMap

    Java面试知识点:集合.Set.泛型.HashSet.HashMap 答案: 1.集合  集合和数组的对比小结      1,数组的长度是不可变的,集合的长度是可变的.      2 ,数组可以存 ...

  8. java hashmap 的api_JAVA基础--JAVA API集合框架(ArrayList、HashSet、HashMap使用)

    一.集合Collection 1. 集合介绍 变量:表示的内存中的一个空间,只能保存确定类型的单个数据 数组:表示的是内存中的多个连续的空间,这些空间中可以存储多个同类型的数据. 后期继续学习面向对象 ...

  9. Java集合系列之四大常用集合(ArrayList、LinkedList、HashSet、HashMap)的用法

    Java集合系列之四大常用集合(ArrayList.LinkedList.HashSet.HashMap)的用法 ArrayList ArrayList就是传说中的动态数组,用MSDN中的说法,就是A ...

  10. java中的几种泛型类——HashSet、HashMap、TreeSet、TreeMap,遍历map,排序,HashTable比较

    HashSet HashSet<E>泛型类在数据组织上类似于数学上的集合,可以进行"交"."并"."差"等运算. HashSet ...

最新文章

  1. ListView通过自定义适配器来显示数据并对Item项以及子view项的控件实现监听.
  2. UA SIE545 优化理论基础4 对偶理论简介1 松弛问题与Lagrange对偶
  3. python如何批量发布数据并如何定时更换token
  4. HDU SPFA算法 Invitation Cards
  5. 这里有 8 个流行的 Python 可视化工具包,你喜欢哪个?
  6. 监控 线程 php,Linux平台PHP5.4设置FPM线程数量的方法
  7. 实现织梦dedecms百度主动推送(实时)网页抓取
  8. oracle通信通道的文件结尾_【移民】加拿大安省发放优才计划移民邀请函;NS省干掉特快通道直申种类的申请通道...
  9. Android状态选择器用法总结
  10. 关于使用cadence建pad
  11. 信贷评分卡的顶层设计思路
  12. Design System Application - Chapter 2 字体 Typography
  13. 贝壳云php源码,贝壳云P1 刷机指南
  14. 桌面显卡和CPU性能天梯图
  15. win8计算机禁止休眠,win8系统设置禁止电脑休眠的教程方法
  16. c++实训 数组之犯二程度 与队列变换
  17. android中weight计算方法,详解Android中weight的使用方法
  18. CC2640R2F BLE5.0 CC2640R2F SPI驱动实现
  19. python68个内置函数_Python中68个内置函数的总结
  20. python 小游戏500行以内_README.md

热门文章

  1. Logback 深入分析
  2. UVa 10082 WERTYU
  3. C程序设计--排序(冒泡、选择、插入)--选择
  4. c++在数组中添加元素_LeetCode 题解 | 1157. 子数组中占绝大多数的元素
  5. python入门容易进阶难_为什么Python入门容易,精通却很难!Python进阶之路!
  6. 大数据要学javaweb吗_学习大数据需要学习javaee的内容吗?
  7. windows10 + centos7 双系统
  8. Precision、Recall、F计算:举例
  9. 放苹果(整数划分变形题 水)poj1664
  10. Sum nyoj215