HashMap的学习

HashMap

特点

1.世界上查询速度最快的数据结构
2.增删速度也很快
3.加载因子是集合存放的元素数量和散列数组长度的比值,建议加载因子 0.75,超过会自动扩容并且重新散列(旧的数据重新计算数组索引值)
4.散列数组初始的长度是 16
5.无序存放
6.底层使用数组+单向链表(JDK 1.7 之后的版本,散列桶的元素超过 8 个,会换成红黑树数据结构)
7.数组虽然有索引值,但是存放的时候不是直接根据索引值的自然顺序存放,而是通过散列算法计算出元素的数组索引值后再根据索引值来存放,查询元素也一样。所以不能根据索引值直接存放和查询元素。也没有与索引值相关的方法。
8.数组+链表(或者红黑树)的整体数据结构也叫散列表或哈希表
9.key不允许重复,可以保存一个null;value可以重复,且可以保存多个null

原理示意图

在这里插入图片描述

常用方法

public void clear(),从此映射中移除所有映射关系(可选操作)。
public boolean containsKey(Object key),如果此映射包含指定键的映射关系,则返回 true
public boolean containsValue(Object value),如果此映射将一个或多个键映射到指定值,则返回 true
public Set<Map.Entry<K,V>> entrySet(),返回此映射中包含的映射关系的 Set 视图。
public boolean equals(Object o),比较指定的对象与此映射是否相等。
public V get(Object key),返回指定键所映射的值;如果此映射不包含该键的映射关系,则返回 null
public int hashCode(),返回此映射的哈希码值。
public boolean isEmpty(),如果此映射未包含键-值映射关系,则返回 true
public Set<K> keySet(),返回此映射中包含的键的 Set 视图。
public V put​(K key,V value),将指定的值与此映射中的指定键相关联,如果 map 中没有指定的 key,返回空值,否则返回被覆盖的 value
public void putAll(Map<? extends K,? extends V> m),从指定映射中将所有映射关系复制到此映射中(可选操作)。
public V remove(Object key),如果存在一个键的映射关系,则将其从此映射中移除(可选操作)。
public int size(),返回此映射中的键-值映射关系数。
public Collection<V> values(),返回此映射中包含的值的 Collection 视图。

遍历元素

1.可以直接使用方法 values 获取 Map 中的值,然后使用 Collection 集合的迭代方式进行遍历
2.可以先使用方法 keySet 获取 Map 中的键,再使用 Collection 集合的迭代方式遍历取出每个键,再通过方法 get 获取对应的值
3.可以先使用方法 entrySet 获取 Map 中的所有键值对,然后通过 Collection 集合的迭代方式遍历取出每个 entry 对象,再通过 entry 对象的方法 getKey 和 getValue 获取每个 entry 对象的键值对

LinkedHashMap

HashMap 的区别就是 LinkedHashMap 额外使用双向链表存放元素的顺序,所以存放和查询时的顺序一致

猜你喜欢

转载自blog.csdn.net/liaowenxiong/article/details/119862269