HashSet 与HashMap底层实现

1. HashSet底层通过包装HashMap来实现,HashSet在添加一个值的时候,实际上是将此值作为HashMap中的key来进行保存。

2. HashMap的底层实现是通过初始化化一个Entry数组来实现key、value的保存。

3.
在HashMap的Entry中有四个变量,key、value、hash、next,其中next用于在hash方法添加值冲突时候,所指向的下一个值。

4. 在HashMap中添加值步骤

第一步,对key的hashcode进行hash计算,获取应该保存到数组中的index。

第二步,判断index所指向的数组元素是否为空,如果为空则直接插入。

第三步,如果不为空,则依次查找entry中next所指定的元素,判读key是否相等,如果相等,则替换久的值,返回。

第四步,如果都不相等,则将此链表头元素赋值给待插入entry的next变量,让后将待插入元素插入到entry数组中去。

5. map遍历方法有两种,keyset 和Map.Entry

时间: 2024-11-09 00:40:43

HashSet 与HashMap底层实现的相关文章

HashMap和HashSet原理及底层实现

HashMap底层用哈希算法实现,下面看一下哈希算表的整体概括: 当map.put("key","values");的时候,底层是这样的: static final Entry<?,?>[] EMPTY_TABLE = {}; transient Entry<K,V>[] table = (Entry<K,V>[]) EMPTY_TABLE; /** * The number of key-value mappings conta

HashMap底层实现原理/HashMap与HashTable区别/HashMap与HashSet区别

Hash算法 Hash,一般翻译做"散列",也有直接音译为"哈希"的,就是把任意长度的输入(又叫做预映射, pre-image),通过散列算法,变换成固定长度的输出,该输出就是散列值.这种转换是一种压缩映射,也就是,散列值的空间通常远小于输入的空间,不同的输入可能会散列成相同的输出,而不可能从散列值来唯一的确定输入值.简单的说就是一种将任意长度的消息压缩到某一固定长度的消息摘要的函数. HASH主要用于信息安全领域中加密算法,它把一些不同长度的信息转化成杂乱的128

HashMap底层实现原理以及HashMap与HashTable区别以及HashMap与HashSet区别

①HashMap的工作原理 HashMap基于hashing原理,我们通过put()和get()方法储存和获取对象.当我们将键值对传递给put()方法时,它调用键对象的hashCode()方法来计算hashcode,让后找到bucket位置来储存值对象.当获取对象时,通过键对象的equals()方法找到正确的键值对,然后返回值对象.HashMap使用链表来解决碰撞问题,当发生碰撞了,对象将会储存在链表的下一个节点中. HashMap在每个链表节点中储存键值对对象. 当两个不同的键对象的hashc

你对hashset和hashmap了解多少?

首先,我们来看hashset. 他的构造函数:    public HashSet() {        map = new HashMap<>();    } 很惊讶吧.构造函数里面竟然有个hashmap! public boolean add(E e) {        return map.put(e, PRESENT)==null;    } 再看 add方法.里面有个present ,去看看present的定义: private static final Object PRESENT

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

1.Set和Map的关系: Set代表一种集合元素无序.不可重复的集合,Map代表一种由多个key-value对组成的集合. Set的集合继承体系: Map关系集合 Map集合的key特征:所有key不能重复,key之间没有顺序.Map集合的所有key将具有set集合的特征. 对Set做改造可将Set改造成Map集合: 2.HashSet和HashMap的区别和联系:    对于HashSet,系统采用Hash算法决定集合元素的存储位置:对于HashMap,系统将value当成key的附属物,系

HashSet、HashMap

HashSet: 很多开发者,初学者都知道HashSet无序,不可重复,线程非同步.底层是哈希表结构. 但它是怎么做到的?什么是散列表数据结构(哈希表)?有什么特性?都清楚吗?不清楚继续往下看. 它是这样做到的: 先来看HashSet的源码,首先看默认构造器: public HashSet() { map = new HashMap<E,Object>(); } // ok,我们看到构造器中new了一个HashMap.key使用了泛型,value使用Object. 再来看add方法源码: pr

java基础之问题:请说出hashCode方法、equals方法、HashSet、HashMap之间的关系

①HashSet是采用HashMap来实现的:这个HashMap的key就是放进HashSet中的对象,value就是一个Object类型的对象 ②当调用HashSet的add方法时,实际上是想HashMap中增加了一行(key-value对),该行的key就是往HashSet增加的那个对象,该行的value就是一个Object类型的常量. ③HashMap底层采用数组来维护 ④调用增加的那个对象的hashCode方法,来得到一个hashCode,然后根据该值来计算出一个数组的下标索引(计算出数

HashSet HashTable HashMap的区别 及其Java集合介绍

(1)HashSet是set的一个实现类,hashMap是Map的一个实现类,同时hashMap是hashTable的替代品(为什么后面会讲到). (2)HashSet以对象作为元素,而HashMap以(key-value)的一组对象作为元素,且HashSet拒绝接受重复的对象.HashMap可以看作三个视图:key的Set,value的Collection,Entry的Set. 这里HashSet就是其实就是HashMap的一个视图. HashSet内部就是使用Hashmap实现的,和Hash

HashSet和HashMap

HashMap 概念和特征 ?概念:以键值对的形式存储数据,由键映射到值,核心在于Key上. ?特征:键不能重复,值可以重复:key-value允许为null. ????HashMap ? SinceJDK1.2 ? 前身是HashTable(SinceJDK1.0) ????HashMap ? 实现了Map接口 ??HashMap底层是一个Entry数组,当发生hash冲突(碰撞)的时候,HashMap是采用链表的方式来解决的,在对应的数组位置存放链表的头结点.对链表而言,新加入的节点会从头结