HashMap Hashtable TreeMap LinkedHashMap 分析
首先对hash的了解:就是关键字,和数据建立关系的映射。
hash常用算法:假设我们中的字符有相应的内部编码,当然在实际过程中,我们不可能将所有的编码当做hash值。
平方取中法,将所得的内部编码平方,取7-9位作为hashcode.
折叠法:将编码分割,然后相加。
除留取余法
即便是按照上面的计算,也有可能发生冲突。
1.HashMap 分析
基于哈希表的Map接口的非同步实现,不保证顺序,允许键值为null,但是只能有一个,它实际相当于链表和数组的结合体。
根据key计算数据在数组上面存储的位置,没有这个位置没有值,则放入值,如果有值,如果有key,进行数据的覆盖,如果不存在,那个这个值将以链表的方式存储,
新加入的放在链表的头部。(java8新加入红黑树)如果不存在key值,那么判断是否为红黑树,如果是,红黑树直接插入,如果不是,遍历准备插入,如果大于8,
转化为红黑树插入,否则,判断是否存在键,覆盖或者插入,最后,判断是否需要扩容。
数据的读取,根据key的hashcode,找到对应位置的数据,这个位置可能是一个,也有可能是多个,如果是多个值,然后通过key值的equals 方法进行对比,
找到元素。
2.Hashtable是线程安全的
值不能为空,否则抛出异常,原理和上面相同,数据新增过程中如果table[index]元素不为空,则进行迭代,如果遇到相同的key,则直接替换,并返回旧value;
否则,我们可以将其插入到table[index]位置
上面两个,里面的数据,会保存同位置的下一个数据的对象。
3.LinkedHashMap
维护一个双向链表,保存上一个和下一个数据的对象。
hashmap 的初始容量是16,乘以负载因子0.75,相当于是12个,在扩容过程中,需要重新计算hash值,计算位置,所以在创建的时候,我们尽量设置大小。
在java8中,引入了红黑树,就是避免拉链过长,默认情况下,当链表长度超过8时,就会转化为红黑树进行。
4.TreeMap 是一个有序的key-value集合,它是通过红黑树实现的。
红黑树是二叉树的一种,每个节点要么是红的,要么是黑色的,根节点是红色的,红色节点的两个儿子一定是黑色的,
每个叶结点(叶结点即指树尾端NIL指针或NULL结点)都是黑的。 对于任意结点而言,其到叶结点树尾端NIL指针的每条路径都包含相同数目的黑结点。
5.在我们使用迭代的过程中,java中,使用了fail-fast机制,就是快速失败机制,也就是数据的安全性,就是多线程下,同时删除和新增,检测失败的一种机制,
但是这种机制不是绝对不会失败,只是用于失败的检测,失败后,会抛出异常。
HashMap Hashtable TreeMap LinkedHashMap 分析的更多相关文章
- Map总结--HashMap/HashTable/TreeMap/WeakHashMap使用场景分析(转)
首先看下Map的框架图 1.Map概述 1.Map是键值对映射的抽象接口 2.AbstractMap实现了Map中绝大部分的函数接口,它减少了“Map实现类”的重复编码 3.SortedMap有序的“ ...
- 杨晓峰-Java核心技术-9 HashMap Hashtable TreeMap MD
目录 第9讲 | 对比Hashtable.HashMap.TreeMap有什么不同? 典型回答 考点分析 知识扩展 Map 整体结构 有序 Map HashMap 源码分析 容量.负载因子和树化 精选 ...
- Collections+Iterator 接口 | Map+HashMap+HashTable+TreeMap |
Collections+Iterator 接口 1. Collections 是一个操作 Set.List 和 Map 等集合的工具类 Collections 中提供了大量方法对集合元素进行排序.查询 ...
- Java 集合系列14之 Map总结(HashMap, Hashtable, TreeMap, WeakHashMap等使用场景)
概要 学完了Map的全部内容,我们再回头开开Map的框架图. 本章内容包括:第1部分 Map概括第2部分 HashMap和Hashtable异同第3部分 HashMap和WeakHashMap异同 转 ...
- Map总结(HashMap, Hashtable, TreeMap, WeakHashMap等使用场景)
概要 学完了Map的全部内容,我们再回头开开Map的框架图. 本章内容包括:第1部分 Map概括第2部分 HashMap和Hashtable异同第3部分 HashMap和WeakHashMap异同 转 ...
- HashMap,HashTable,TreeMap区别和用法
开始学HashTable,HashMap和TreeMap的时候比较晕,觉得作用差不多,但是到实际运用的时候又发现有许多差别的.需要大家注意,在实际开发中以需求而定. java为数据结构中的映射定义了一 ...
- HashMap,Hashtable,TreeMap ,Map
package com.wzy.list; import java.util.HashMap; import java.util.Hashtable; import java.util.Iterato ...
- Set集合[HashSet,TreeSet,LinkedHashSet],Map集合[HashMap,HashTable,TreeMap]
------------ Set ------------------- 有序: 根据添加元素顺序判定, 如果输出的结果和添加元素顺序是一样 无序: 根据添加元素顺序判定,如果输出的结果和添加元素的顺 ...
- hasSet,TreeSet,ArrayList,LinkedList,Vector,HashMap,HashTable,TreeMap利用Iterator进行输出
基础类,没有重写hashCode()和equals()方法: package niukewang; import java.util.Objects; public class setClass { ...
随机推荐
- Sorting a Three-Valued Sequence
链接 分析:首先我们先对其进行排序,并看排序以后有多少个元素顺序是对的,接着我们看有多少个元素经过一次交换可以得到的,最后剩下的元素就是经过两次交换可以得到的了. /* PROB:sort3 ID:w ...
- linux--vsftpd的安装和配置(转)
Linux下如何进行FTP设置(转) [TOC] Redhat/CentOS安装vsftp软件 1. 安装vsftp $ yum install vsftpd -y 2. 添加ftp帐号和目录 先检查 ...
- JAVA RTTI
基础类可接收我们发给派生类的任何消息,因为两者拥有完全一致的接口.我们要做的全部事情就是从派生上溯造型,而且永远不需要回过头来检查对象的准确类型是什么.所有细节都已通过多态性获得了完美的控制. 但经过 ...
- Centos_svn安装操作使用步骤
安装svn服务器端 (1)从镜像下载安装svn服务器端yum install subversion//进入目录,准备创建svn目录cd /usr/local///创建一个svn目录mkdir svn/ ...
- bzoj4566
后缀自动机+dp 一个串在另一个串上跑. 先对A建出自动机,然后用B在上面跑,记录当前匹配的最大长度,每次经过一个节点记录经过次数,并加上(len-Max(par))*Right,是这个状态对答案的贡 ...
- chromium浏览器开发系列第一篇:如何获取最新chromium源码
背景: 最近摊上一个事儿,领导非要让写一篇技术文章,思来想去,自己接触chrome浏览器时间也不短了,干脆就总结一下吧.于是乎,本文顺理成章.由于有些细节必需描述清楚,所以这次先讲如何拿到c ...
- Vs2013+opencv2.4.12+x64用VideoCapture无法打开视频
环境变量中匹配的是x86的opencv_ffmpeg244.dll,与项目不匹配,需在项目exe文件同目录下添加X:\opencv\opencv2.4.12\build\x64\vc12\bin\op ...
- hihocoder 1331 扩展二进制数(递归)
传送门 题意 略 分析 由低位向高位考虑,令f(n)为n的扩展二进制数表示数 1.当前数为偶数,末位为0或2,那么f(n)=f(n/2)+f(n/2-1) 2.当前数为奇数,末位为1,那么f(n)=f ...
- AssetDatabase文档翻译
AssetDatabase是一个能获取工程资源的API,它提供一些方法比如:查找.加载.创建.删除和修改.Unity需要了解工程文件夹里的所有改变,假如想要获取或修改资源文件,就使用 AssetDat ...
- CF1060E Sergey and Subway(点分治)
给出一颗$N$个节点的树,现在我们**在原图中**每个不直接连边但是中间只间隔一个点的两个点之间连一条边. 比如**在原图中**$u$与$v$连边,$v$与$w$连边,但是$u$与$w$不连边,这时候 ...