hashmap原理
来源:互联网 发布:知乎 宋茜 编辑:程序博客网 时间:2024/05/22 03:16
数组是栈,占用内存大,链表是堆,数组读取快,链表增删快
HashMap底层就是一个数组结构,数组中的每一项又是一个链表。当新建一个HashMap的时候,就会初始化一个数组。
当我们往HashMap中put元素的时候,先根据key的hashCode重新计算hash值,根据hash值得到这个元素在数组中的位置(即下标),如果数组该位置上已经存放有其他元素了,那么在这个位置上的元素将以链表的形式存放,新加入的放在链头,最先加入的放在链尾。如果数组该位置上没有元素,就直接将该元素放到此数组中的该位置上。
HashMap中要找到某个元素,需要根据key的hash值来求得对应数组中的位置。如何计算这个位置就是hash算法。前面说过HashMap的数据结构是数组和链表的结合,所以我们当然希望这个HashMap里面的元素位置尽量的分布均匀些,尽量使得每个位置上的元素数量只有一个,那么当我们用hash算法求得这个位置的时候,马上就可以知道对应位置的元素就是我们要的,而不用再去遍历链表,这样就大大优化了查询的效率。
HashSet实现Set接口,由哈希表(实际上是一个HashMap实例)支持。它不保证set 的迭代顺序;特别是它不保证该顺序恒久不变。此类允许使用null元素。HashSet中不允许有重复元素,这是因为HashSet是基于HashMap实现的,HashSet中的元素都存放在HashMap的key上面,而value中的值都是统一的一个private static final Object PRESENT = new Object();。HashSet跟HashMap一样,都是一个存放链表的数组。
,它不允许集合中有重复的值,当我们提到HashSet时,第一件事情就是在将对象存储在HashSet之前,要先确保对象重写equals()和hashCode()方法,这样才能比较对象的值是否相等,以确保set中没有储存相等的对象。如果我们没有重写这两个方法,将会使用这个方法的默认实现。
- HashMap原理
- hashmap原理
- Hashmap原理
- hashMap原理
- HashMap原理
- HashMap原理
- Hashmap原理
- HashMap原理
- Hashmap原理
- HashMap原理
- HashMap原理
- hashMap原理
- HashMap原理
- HashMap原理
- HashMap原理
- HashMap原理
- Hashmap原理
- HashMap原理
- typedef与#define
- 多核系统中温度隐蔽通道的带宽优化
- 调用 GetProcAddress 失败,在 ISAPI 筛选器 "C:\Windows\MicrosoftNET\Framework\v4030319\
- Photoshop中27种图层混合模式原理图文详解
- Android简单、高性能的高斯模糊(毛玻璃)效果(附源码)
- hashmap原理
- CI框架路由去掉index.php
- Fiddler工作原理、使用场景
- [学习笔记]kd-tree
- 安卓icon图标大小标准,以及mdpi等对应放置的图片大小
- thinkphp 3.2预防sql注入、对查询的sql过滤
- Gilde 用法缓冲
- mysql死锁问题分析
- Android App应用程序实现自动更新