Java中的Map

Posted 浴盆

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java中的Map相关的知识,希望对你有一定的参考价值。

Map类型

LinkedHashMap继承自HashMap,TreeMap继承自SortedMap, HashMap和SortedMap都实现了Map接口。Map的主要方法有remove、size、containsKey、clear、containsValue、putIfabsent

Map构造方法

不带参数的构造方法,默认长度是16,默认的负载因子是0.75。等同于

Map<Integer,String> map = new HashMap(16, 0.75f);

超过75的坐标被占用后会进行扩容。扩容之后承2变成32。如果使用了new HashMap(3)实际相当于new HashMap(8),大于这个数字的2的n次方。如果new HashMap(10000, 0.75f),插入10000条数据不一定需要扩容,因为实际容量为12288(2的14次方)

Map成员变量

每存入一个键值对,HashMap内部就增加了一个Entry。

Entry<K,V> next;
final int hash;

HashMap顺序

HashMap是无序的,遍历输出的顺序与put的顺序无关,那么是按什么顺序输出的?假设

Map<Integer,String> map = new HashMap(16);
map.put(120, "hello");

120 % 16= 8,120的key就会放在位置8,如果再put一个key为40的值,40就放在120的next属性上
如果key是string类型,需要用到的方法1:

final int hash(Object key)

用hashCode()方法将key转换成hash码后并进行优化得到的hash码,如yuwen优化后的hash码为115347492。接下来需要用到方法2:

static int indexFor(int h, int length)

对优化后的hash码进行取址,确定在HashMap中的位置,如115347492在长度为16的HashMap中坐标为4

LinkedHashMap

数据量够大的时候,LinkedHashMap在读取的时间比HashMap短,写入的时候比HashMap长
LinkedHashMap可以按写入顺序和使用顺序(需要在构造函数中增加参数)进行遍历和输出。
LRUMAP是在有限的集合里面,如果存储的时候,集合超出了限制,那么就淘汰最近最少使用的数据,实际上是一种资源调度的算法。可以通过继承改造LinkedHashMap实现LRUMAP。
TreeMap是按升序/降序排列的map

以上是关于Java中的Map的主要内容,如果未能解决你的问题,请参考以下文章

JAVA键值对:“值”排升序,结果输出“键”的顺序。

JAVA键值对:“值”排升序,结果输出“键”的顺序。

java8新特性:对map集合排序,根据key或者value操作排序(升序降序)

map 中的键值都可以是啥类型的啊

按键按升序排序地图

java map