关于HashMap,HashTable,HashSet浅析
首先,最重要的,HashMap
public class HashMap<K,V>extends AbstractMap<K,V>implements Map<K,V>, Cloneable, Serializable
{/*** The default initial capacity - MUST be a power of two.*/static final int DEFAULT_INITIAL_CAPACITY = 1 << 4; // aka 16/*** The maximum capacity, used if a higher value is implicitly specified* by either of the constructors with arguments.* MUST be a power of two <= 1<<30.*/static final int MAXIMUM_CAPACITY = 1 << 30;/*** The load factor used when none specified in constructor.*/static final float DEFAULT_LOAD_FACTOR = 0.75f;/*** An empty table instance to share when the table is not inflated.*/static final Entry<?,?>[] EMPTY_TABLE = {};/*** The table, resized as necessary. Length MUST Always be a power of two.*/transient Entry<K,V>[] table = (Entry<K,V>[]) EMPTY_TABLE;
public V put(K key, V value) {if (table == EMPTY_TABLE) {inflateTable(threshold);}if (key == null)return putForNullKey(value);int hash = hash(key);int i = indexFor(hash, table.length);for (Entry<K,V> e = table[i]; e != null; e = e.next) {Object k;if (e.hash == hash && ((k = e.key) == key || key.equals(k))) {V oldValue = e.value;e.value = value;e.recordAccess(this);return oldValue;}}modCount++;addEntry(hash, key, value, i);return null;
}
然后我们说说HashSet:
public class HashSet<E>extends AbstractSet<E>implements Set<E>, Cloneable, java.io.Serializable
{static final long serialVersionUID = -5024744406713321676L;private transient HashMap<E,Object> map;// Dummy value to associate with an Object in the backing Mapprivate static final Object PRESENT = new Object();/*** Constructs a new, empty set; the backing <tt>HashMap</tt> instance has* default initial capacity (16) and load factor (0.75).*/public HashSet() {map = new HashMap<>();}
这里就可以看出,HashSet底层就是一个HashMap,而它跟HashMap不同的就是它是实现Set接口,所以他的数据必须唯一。
最后是HashTable:
由于篇幅问题,就不贴代码了,跟HashMap差不多,底层也是一个数组。就说一下它跟HashMap主要的区别吧:
转载于:https://www.cnblogs.com/jeyson/p/6425199.html
关于HashMap,HashTable,HashSet浅析相关推荐
- HashMap HashTable HashSet区别剖析
HashMap.HashSet.HashTable之间的区别是Java程序员的一个常见面试题目,在此仅以此博客记录,并深入源代码进行分析: 在分析之前,先将其区别列于下面 1:HashSet底层采用的 ...
- HashMap底层实现原理/HashMap与HashTable区别/HashMap与HashSet区别
Hash算法 Hash,一般翻译做"散列",也有直接音译为"哈希"的,就是把任意长度的输入(又叫做预映射, pre-image),通过散列算法,变换成固定长度的 ...
- HashMap底层实现原理/HashMap与HashTable区别/HashMap与HashSet区别(转)
HashMap底层实现原理/HashMap与HashTable区别/HashMap与HashSet区别 文章来源:http://www.cnblogs.com/beatIteWeNerverGiveU ...
- Set集合[HashSet,TreeSet,LinkedHashSet],Map集合[HashMap,HashTable,TreeMap]
------------ Set ------------------- 有序: 根据添加元素顺序判定, 如果输出的结果和添加元素顺序是一样 无序: 根据添加元素顺序判定,如果输出的结果和添加元素的顺 ...
- HashMap,HashTable,TreeMap,HashSet,TreeSet
注意:最好先看一下(三)中 树红黑树的数据结构分析,可以的话数组,链表的数据结构也先复习一下,这里默认你懂数组,链表 2.2 map Map 是一种把键对象和值对象映射的集合,它的每一个元素都包含一对 ...
- HashMap和HashSet的区别
转自:http://www.importnew.com/6931.html HashMap和HashSet的区别是Java面试中最常被问到的问题.如果没有涉及到Collection框架以及多线程的面试 ...
- Java 里的HashMap(HashTable) 简介.
之前已经介绍过Java的另1个容器HashSet. 其实HashMap的存储原来跟HashSet区别不大, 可以说是HashSet的1个扩展. 一,预备知识: 哈希表 我们可以把哈希表看做是1个特别 ...
- 【转】HashMap和HashSet的区别
原文网址:http://www.importnew.com/6931.html HashMap和HashSet的区别是Java面试中最常被问到的问题.如果没有涉及到Collection框架以及多线程的 ...
- Java笔记(七)HashMap和HashSet
HashMap和HashSet 一)HashMap 1.Map接口 interface Map<K,V> {int size();//查看Map中的键值对个数boolean isEmpty ...
- Java—Map集合详解(HashMap/Hashtable/LinkedHashMap/Properties/TreeMap/WeakHashMap/IdentityHashMap/EnumMap)
关注微信公众号:CodingTechWork,一起学习进步. Map Map集合介绍 Map(也称为字典.关联数组)是用于保存具有映射关系的数据,保存两组值,key和value,这两组值可以是任何 ...
最新文章
- 修改CentOS yum源
- 回滚 - 每天5分钟玩转 Docker 容器技术(141)
- Community Server专题五:IHttpHandlerFactory
- CV多任务学习笔记 yolop
- 团队项目(NABC分析)
- 前端学习(3057):vue+element今日头条管理-回顾
- 水面反光如何拍摄_如何在雨中拍摄,这些技巧会让你的摄影更完美
- 计算机一级查询记录,技巧查看电脑中使用过的记录痕迹的详细教程
- 设计模式之不简单的工厂模式(三)
- ubuntu 安装java_Hadoop3.1.3安装教程_单机/伪分布式配置
- Java Maven项目打包成可执行jar文件
- MyCat分布式数据库集群架构工作笔记0015---高可用_负载均衡_Mycat双主双从读写分离
- sudo apt-get install lsb-core
- 卡函数or1200基于simple-spi的SD卡驱动
- DB9公头母头接口定义及连接
- Class文件是个啥?
- 想转行学IT,Java怎么样?
- mac系统+frida 简单测试真机or genymotion模拟器
- matalb读取txt文件以及将数据写入txt文件
- 模型评价指标—ROC曲线
热门文章
- python打印对象地址_Python打印对象的全部属性
- C++中如何读取一个数的位数_初中数学:近似数和平均数知识点总结及练习
- 2014蓝桥杯:地宫取宝(DFS详解)
- 2018 CodeM复赛:B. 软件包管理器(二分)
- opencv cv.waitKey(60) 0xff 含义和作用
- C++ STL front_inserter back_inserter inserter 插入型迭代器的正确打开方式
- paper reading:[第一代GCN] Spectral Networks and Deep Locally Connected Networks on Graphs
- [高光谱] Hyperspectral-Classification Pytorch 的高光谱场景的通用类 HyperX
- 使用Python编写Prometheus监控metrics接口
- 包含对象的json格式_如何把JSON数据格式转换为Python的类对象?