说说 Java Map 映射

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 出来的地址已经存在值,那么将线性的方式向下探查,直到找到一个空地址为止。

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

已标记关键词 清除标记
相关推荐
©️2020 CSDN 皮肤主题: 精致技术 设计师:CSDN官方博客 返回首页