说说 Java Map 映射

   日期:2020-08-30     浏览:115    评论:0    
核心提示:Java Map 是一种键值对的映射集合,在实际编程过程中,很常见。具体有以下这些实现类:HashMap 用到了哈希函数。哈希函数是一种映射关系,根据数据的关键词 key ,通过一定的函数关系,计算出该元素存储位置的函数。address = H [key]一种实际的数据结构是拉链式的链表结构:1 HashTable 与 HashMapHashTable 的作者是: Arthurvan Hoff、Josh Bloch、Neal Gafter。 而 HashMap 的作者是: Arthur

Java Map 是一种键值对的映射集合,在实际编程过程中,很常见。

具体有以下这些实现类:

HashMap 用到了哈希函数。哈希函数是一种映射关系,根据数据的关键词 key ,通过一定的函数关系,计算出该元素存储位置的函数。

address = H [key]

一种实际的数据结构是拉链式的链表结构:

1 HashTable 与 HashMap

HashTable 的作者是: Arthurvan Hoff、Josh Bloch、Neal Gafter。 而 HashMap 的作者是: Arthurvan Hoff、Josh Bloch、Neal Gafter、Doug Lea。这些人来头不小。

Hashtable 被弃用的原因:

  1. Hashtable 是线程安全的,效率较低。
  2. 没有遵循驼峰命名法。

2 WeakHashMap

WeakHashMap 基于弱引用。而 Java 在垃圾回收时,一旦发现弱引用对象,无论当前内存空间是否充足,都会将弱引用回收。

在缓存场景下,由于内存有限,不能缓存所有对象,所以需要一种的删除机制,淘汰掉一些对象 。Tomcat 的源码里,就用到 WeakHashMap 来实现缓存。

注意:如果使用基础类型作为 WeakHashMap 的 key ,那么某些 key 就不会被回收。

输出:

因为基础类型 Integer 会保留 - 128 到 127 的缓存。所以那些Key<= 127 的 Entry 将不会被自动回收,所以 map 的大小会稳定在 128 左右。

但如果我们使用自定义的类作为 key 的话,那么 gc 之后,就会被回收。

输出:

3 IdentityHashMap 与 HaspMap 之间的区别

主要区别是比较方式上,IdentityHashMap 用的是双等号,而 HaspMap 用的是 equals()。

线性探测法指的是,如果 hash 出来的地址已经存在值,那么将线性的方式向下探查,直到找到一个空地址为止。

拉链法之前已做介绍,这里不再赘述。

 
打赏
 本文转载自:网络 
所有权利归属于原作者,如文章来源标示错误或侵犯了您的权利请联系微信13520258486
更多>最近资讯中心
更多>最新资讯中心
0相关评论

推荐图文
推荐资讯中心
点击排行
最新信息
新手指南
采购商服务
供应商服务
交易安全
关注我们
手机网站:
新浪微博:
微信关注:

13520258486

周一至周五 9:00-18:00
(其他时间联系在线客服)

24小时在线客服