目录
一. HashMap概述
二. HashMap特点
三. HashMap构造方法
四. HashMap的常用方法
五. 使用注意事项
六. 代码示例
一. HashMap概述
HashMap
是 Java 中的一个非常重要的类,它实现了 Map
接口,用于存储键值对(key-value pairs)。HashMap
是基于哈希表的 Map 接口实现,它允许空键(null key)和空值(null value),并且不保证映射的顺序。
二. HashMap特点
- 基于哈希表:
HashMap
使用哈希表来存储数据,因此它具有很快的查找速度,通常为常数时间复杂度 O(1)。 - 键值对存储:
HashMap
存储的是键值对,其中每个键映射到一个值。 - 键的唯一性:
HashMap
中的键是唯一的,不允许重复的键存在。如果尝试插入具有相同键的另一个值,旧值将被新值替换。 - 允许空值和空键:
HashMap
允许键或值为null
。 - 不保证顺序:
HashMap
不保证元素的顺序,这意味着元素的顺序可能会在每次使用时发生变化。 - 非同步:
HashMap
不是线程安全的。如果需要线程安全的HashMap
,可以使用Collections.synchronizedMap
方法包装它,或者使用ConcurrentHashMap
。
三. HashMap构造方法
HashMap
提供了多种构造方法,允许你指定初始容量和加载因子等参数:
HashMap()
:创建一个初始容量为 16,加载因子为 0.75 的空HashMap
。HashMap(int initialCapacity)
:创建一个指定初始容量和默认加载因子(0.75)的空HashMap
。HashMap(int initialCapacity, float loadFactor)
:创建一个指定初始容量和加载因子的空HashMap
。HashMap(Map<? extends K, ? extends V> m)
:创建一个包含映射关系与指定 Map 相同的HashMap
。
四. HashMap的常用方法
put(K key, V value)
:将指定的值与此映射中的指定键关联。get(Object key)
:返回指定键所映射的值;如果映射中不包含该键,则返回null
。remove(Object key)
:如果存在一个键的映射关系,则将其从映射中移除。keySet()
:返回映射中包含的键的Set
视图。values()
:返回映射中包含的值的Collection
视图。entrySet()
:返回映射中包含的键值映射关系的Set
视图。clear()
:从映射中移除所有键值对。
五. 使用注意事项
- 当
HashMap
中的元素数量超过容量和加载因子的乘积时,HashMap
会自动进行扩容,这涉及到重新计算哈希值和重新分配元素,可能会导致性能下降。 HashMap
的keySet()
、values()
和entrySet()
方法返回的集合视图支持对原HashMap
的修改。- 在多线程环境中,如果需要线程安全的
HashMap
,可以使用Collections.synchronizedMap
方法包装它,或者使用ConcurrentHashMap
。
六. 代码示例
代码示例中主要使用了一些map操作方法
package com.example.demo01;import java.util.Collection;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;
import java.util.stream.Collectors;/*** 文件名:HashMapMian* 创建者:* 创建时间:2024-11-02* 描述:HashMap常用操作方式示例*/
public class HashMapMian {public static void main(String[] args) {Map<String,Integer> map = new HashMap<>();//1.调用put()方法增添数据map.put("小红",19);map.put("小明",25);map.put("小黑",27);map.put("小白",21);//2.根据key获取valueSystem.out.println(map.get("小明"));//3.调用remove()方法删除数据map.remove("小明");//4.调用containsKey()方法查看是否存在指定的键boolean b = map.containsKey("小红");System.out.println(b);//5.调用containsValue()方法查看是否存在指定的值boolean bbb = map.containsValue(19);//6.调用isEmpty()方法查看集合是否为空boolean empty = map.isEmpty();System.out.println(empty);//7.获取key列表Set<String> keyedSet = map.keySet();System.out.println("key: "+keyedSet);//8.获取所有值Collection<Integer> values = map.values();System.out.println(values);//用 Java8 流来处理值,value求和int sumOfAges = map.values().stream().mapToInt(Integer::intValue).sum();System.out.println("求和: "+sumOfAges);// 过滤出所有大于 25 的年龄Collection<Integer> filteredValues = map.values().stream().filter(value -> value > 25).collect(Collectors.toList());System.out.println("大于 25 的年龄: "+filteredValues);//9.清空map集合map.clear();System.out.println(map.isEmpty());}
}