zoukankan      html  css  js  c++  java
  • HashSet的底层原理

    ( tip:底层是用hashMap 实现的)

    HashSet底层使用了哈希表来支持的,特点:存储快
    往HashSet添加元素的时候,HashSet会先调用元素的HashCode方法得到元素的哈希值,然后通过元素的哈希值经过异或移位等运算,就可以算出该元素在哈希表中的存储位置。

    运行原理

    如果算出的元素存储的位置目前没有任何元素存储,name该元素可以直接存储在该位置上;如果算出的元素的存储位置上目前已经有了其他的元素,那么还会调用该元素的 equals方法 ,与该位置的元素进行比较一次,如果过equals方法返回的是true,那么该位置上的元素就会被视为重复元素,不允许被添加,如果false,则允许添加。

    实现原理

    hashset是基于hashmap实现的,默认构造函数是构建一个初始容量为16,负载因子为0.75的hashmap。封装了一个hashmap 对象来存储所有的集合元素,所有放在 hashset中的集合元素实际上由 hashmap的key来保存,而 hashset中的 hashmap的 value则存储了一个PRESENT的静态object对象

    hashset和 treeset有什么区别

    hashset是由一个hash表来实现的,因此它的元素是无序的,add,remove,contains方法的时间复杂度是 O(1)

    treeset是由一个树形结构来实现的,它里面的元素是有序的,因此,add,remove,contains方法的时间复杂度是 O(logn)

  • 相关阅读:
    web 后台返回json格式数据的方式(status 406)
    消息队列比较
    CAP
    Redis分布式锁的正确实现方式
    idea 快捷键
    给web请求加遮罩动画
    java动态代理实现与原理详细分析(代码层面解释了AOP的实现)
    Spring框架IOC和AOP的实现原理(概念)
    springboot后台控制重定向
    消息队列如何保证幂等性?
  • 原文地址:https://www.cnblogs.com/nineberg/p/13692174.html
Copyright © 2011-2022 走看看