HashMap相关知识学习
2018-06-18 02:03:44来源:未知 阅读 ()
HashMap
HashMap是基于哈希表的Map接口的实现,HashMap是一个散列表,存储的内容是键值对(key-value)映射,键值对都可为null;
HashMap继承自 AbstractMap<K, V> 并实现 Map<K, V>, Cloneable, Serializable接口;
HashMap不是同步的,不是线程安全的;
HashMap实际上是一个“链表散列”的数据结构,即数组和链表的结合体。底层是个数组,数组上存储的数据是Entry<K,V>类型的链表结构对象。
HashMap和HashTable
HashMap和HashTable都实现了Map接口,主要区别有,线程安全性,同步(synchronize)和速度;
HashMap可以接受空的键值对而HashTable不行;
HashMap是非synchronize而HashTable是synchronize,意味着HashTable是线程安全的,多个线程可以公用一个HashTable;如果没有正确的同步,多个线程不能共享HashMap;
由于HashTable是线程安全的也是synchronize的,在单线程的环境下它比HashMap慢;
HashMap不能保证随着时间的推移Map中的元素的位置不变
HashMap,LinkedHashMap和treeMap
HashMap是无序的,LinkedHashMap和treeMap是有序的;
LinkedHashMap是HashMap的子类,保存了插入的顺序,需要输出的顺序和输入的顺序相同时可用LinkedHashMap;
treeMap实现了sortMap接口,能够把保存的数据按照键的值排序,默认是按照自然数排序也可自定义排序方式。
HashMap工作原理
HashMap基于哈希原理,可以通过put和get方法存储和获取对象。当我们将键值对传递给put方法时,它调用键对象的hashCode()方法来计算hashcode,然后找到对应的bucket位置存储键对象和值对象作为Map.Entry;如果两个对象的hashcode相同,所以对应的bucket位置是相同的,HashMap采用链表解决冲突碰撞,这个Entry(包含有键值对的Map.Entry对象)会存储到链表的下一个节点中;如果对应的hashcode和key值都相同,则修改对应的value的值。HashMap在每个链表节点中存储键值对对象。当使用get()方法获取对象时,HashMap会根据键对象的hashcode去找到对应的bucket位置,找到对应的bucket位置后会调用keys.equals()方法去找到连表中对应的正确的节点找到对象。
参考资料:http://www.importnew.com/7099.html,https://www.cnblogs.com/skywang12345/p/3310835.html
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
上一篇:Java集合总结【面试题+脑图】,将知识点一网打尽!
下一篇:如何接手一个新项目
- 面试的时候按照这个套路回答 Java GC 的相关问题一定能过 2020-06-08
- 总结一些 Java 相关笔试、面试题,万一用上了呢 (=_=) -- 基 2020-06-08
- HashMap:源代码(构造方法、put、resize、get、remove、rep 2020-06-04
- HashMap1.7和1.8,红黑树原理! 2020-06-03
- JDK1.7和1.8的HashMap对比详解 2020-06-02
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash