zoukankan      html  css  js  c++  java
  • HashSet的实现原理

          HashSet实际上是一个HashMap实例,都是一个存放链表的数组。它不保证存储元素的迭代顺序;此类允许使用null元素。

          HashSet中不允许有重复元素,这是因为HashSet是基于HashMap实现的,HashSet中的元素都存放在HashMap的key上面,而value中的值都是统一的一个固定对象private static final Object PRESENT = new Object();

            HashSet中add方法调用的是底层HashMap中的put()方法,而如果是在HashMap中调用put,首先会判断key是否存在,如果key存在则修改value值,如果key不存在这插入这个key-value。

           而在set中,因为value值没有用,也就不存在修改value值的说法,因此往HashSet中添加元素,首先判断元素(也就是key)是否存在,如果不存在这插入,如果存在着不插入,这样HashSet中就不存在重复值。

           所以判断key是否存在就要重写元素的类的equals()和hashCode()方法,当向Set中添加对象时,首先调用此对象所在类的hashCode()方法,计算次对象的哈希值,此哈希值决定了此对象在Set中存放的位置;若此位置没有被存储对象则直接存储,若已有对象则通过对象所在类的equals()比较两个对象是否相同,相同则不能被添加。

  • 相关阅读:
    Activiti学习笔记1 — 下载与开发环境的配置
    JavaScript实现本地图片上传前进行裁剪预览
    我国县及县级以上城市编码
    一些小技巧
    NodeJS学习之异步编程
    NodeJS学习之网络操作
    NodeJS学习之文件操作
    Sass和Compass设计师指南
    Sass
    CKEditor配置及使用
  • 原文地址:https://www.cnblogs.com/aitree/p/14479425.html
Copyright © 2011-2022 走看看