说说 Java Map 映射

谁践踏了优雅 2022-12-02 04:09 319阅读 0赞

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

format_png

具体有以下这些实现类:
format_png 1

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

  1. address = H [key]

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

format_png 2

1 HashTable 与 HashMap

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

format_png 3

Hashtable 被弃用的原因:

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

2 WeakHashMap

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

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

format_png 4

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

format_png 5

输出:
format_png 6

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

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

format_png 7

输出:

format_png 8

3 IdentityHashMap 与 HaspMap 之间的区别

format_png 9

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

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

format_png 10

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

发表评论

表情:
评论列表 (有 0 条评论,319人围观)

还没有评论,来说两句吧...

相关阅读

    相关 java中的映射思想(map)

    java中的映射思想(map) 学会如何将一个值转换为另一个值(映射思想:map)) ![\[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(i

    相关 Java集合(四):Map映射

    集是一个集合,它可以快速的查找现有的元素。但是,要查看一个元素,需要有要查找元素的精确副本。这不是一个非常通用的查找方式。通常,我们知道某些键的信息,并想要查找与之对应的元素。

    相关 映射Map

    数学理解: ![在这里插入图片描述][watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9n