💎一站式轻松地调用各大LLM模型接口,支持GPT4、智谱、星火、月之暗面及文生图 广告
[TOC] ## **1 什么是Java HashMap** Java HashMap类通过使用哈希表来实现Map接口。HashMap继承了AbstractMap类并实现Map接口。 Java HashMap要记住的核心要点: * Java HashMap类包含key-value对。 * Java HashMap类不能存储重复数据(key不能重复)。 * Java HashMap类可以包含一个或多个null值。 * Java HashMap类是非同步的(线程不安全)。 * Java HashMap类元素是无序的。 * Java HashMap类的初始默认容量为16,负载因子为0.75。 <br> <br> ## **2 Java HashMap的层次结构** :-: ![](https://img.kancloud.cn/c3/54/c354688547120628c7e9066e7c7126cd_171x443.png) 如上图所示,HashMap类继承了AbstractMap类并实现了Map接口。 :-: ![](https://img.kancloud.cn/17/9d/179d1a97a9e8fedf7e9f6aeda2646387_1384x482.png) <br> <br> ## **3 Java HashMap的语法** ~~~java public class HashMap<K,V> extends AbstractMap<K,V> implements Map<K,V>, Cloneable, Serializable ~~~ 基本类型对应的包装类表如下: | 基本类型 | 引用类型 | | --- | --- | | boolean | Boolean | | byte | Byte | | short | Short | | int | Integer | | long | Long | | float | Float | | double | Double | | char | Character | HashMap 类位于 java.util 包中,使用前需要引入它,语法格式如下: ~~~ import java.util.HashMap; // 引入 HashMap 类 ~~~ <br> <br> ## **4 Java HashMap的构造方法** | 构造方法 | 描述 | | --- | --- | | HashMap() | 用于构造默认的HashMap。 | | HashMap(Map m) | 用于通过使用给定Map对象的元素来初始化HashMap。 | | HashMap(int capacity) | 用于将HashMap的容量初始化为给定的整数值。 | | HashMap(int capacity, float loadFactor) | 用于通过使用其参数来初始化HashMap的容量和负载因子。 | <br> <br> ## **5 Java HashMap的方法** | 方法 | 描述 | | --- | --- | | [void clear()]() | 用于删除Map中的所有数据。 | | [boolean isEmpty()]() | 如果Map不包含元素,则用于返回true。 | | [Object clone()]() | 用于返回此HashMap实例的浅表副本:键和值本身不会被克隆。 | | [Set entrySet()]() | 用于返回Map中包含的Entry的Set集合。 | | [Set keySet()]() | 用于返回Map中所有key的Set视图。 | | [V put]() | 用于在Map中插入一个条目。 | | [void putAll(Map map)]() | 用于在Map中插入指定的Map。 | | [V putIfAbsent(K key, V value)]() | 仅当尚未将指定值和指定键插入Map时,才将其插入。 | | [V remove(Object key)]() | 用于删除指定key的条目。 | | [boolean remove(Object key, Object value)]() | 从Map中删除具有关联的指定键的指定值。 | | [V compute(K key, BiFunction remappingFunction)]() | 用于计算指定键及其当前映射值的Map(如果没有当前映射,则为null)。 | | [V computeIfAbsent(K key, Function mappingFunction)]() | 如果指定的键尚未与值关联(或已映射为null),则使用给定的映射函数计算它的值,除非为null,否则将其输入到此Map中。 | | [V computeIfPresent(K key, BiFunction remappingFunction)]() | 如果指定键的值存在且非空,则用于给定键及其当前映射值的情况下计算新映射。 | | [boolean containsValue(Object value)]() | 如果Map中存在等于该值的某个值,则此方法返回true,否则返回false。 | | [boolean containsKey(Object key)]() | 如果Map中存在等于该键的某个键,则此方法返回true,否则返回false。 | | [boolean equals(Object o)]() | 用于将指定的Object与Map进行比较。 | | [void forEach(BiConsumer action)]() | 对Map中的每个条目执行给定的操作,直到所有条目都已处理或该操作引发异常为止。 | | [V get(Object key)]() | 返回根据key获取的value对象。 | | [V getOrDefault(Object key, V defaultValue)]() | 返回根据key获取的value对象,如果Map不包含该key的值,则返回默认值defaultValue。 | | [V merge(K key, V value, BiFunction remappingFunction)]() | 如果指定的键尚未与值关联或与null关联,请将其与给定的非null值关联。 | | [V replace(K key, V value)]() | 将指定的值替换为指定的键。 | | [boolean replace(K key, V oldValue, V newValue)]() | 用指定键的新值替换旧值。 | | [void replaceAll(BiFunction function)]() | 用在该条目上调用给定函数的结果替换每个条目的值,直到处理完所有条目或该函数引发异常为止。 | | [Collection values()]() | 返回Map中所有value的Set集合。 | | [int size()]() | 返回Map的元素个数。 | 以下实例我们创建一个 HashMap 对象 map, 整型(Integer)的 key 和字符串(String)类型的 value: <br> <br> ## **6 Java HashMap例子:add()** ~~~java import java.util.*; class da01HashMap{ public static void main(String args[]){ HashMap<Integer,String> hm=new HashMap<Integer,String>(); System.out.println("初始化HashMap: "+hm); hm.put(100,"Eric"); hm.put(101,"Jack"); hm.put(102,"Rose"); System.out.println("执行put()方法后 "); for(Map.Entry m:hm.entrySet()){ System.out.println(m.getKey()+" "+m.getValue()); } hm.putIfAbsent(103, "Lucy"); System.out.println("执行putIfAbsent()方法后 "); for(Map.Entry m:hm.entrySet()){ System.out.println(m.getKey()+" "+m.getValue()); } HashMap<Integer,String> map=new HashMap<Integer,String>(); map.put(104,"Macy"); map.putAll(hm); System.out.println("执行putAll()方法后 "); for(Map.Entry m:map.entrySet()){ System.out.println(m.getKey()+" "+m.getValue()); } } } ~~~ **运行结果:** 初始化HashMap: {} 执行put()方法后 100 Eric 101 Jack 102 Rose 执行putIfAbsent()方法后 100 Eric 101 Jack 102 Rose 103 Lucy 执行putAll()方法后 100 Eric 101 Jack 102 Rose 103 Lucy 104 Macy <br> <br> ## **7 Java HashMap例子:remove()** ~~~java import java.util.*; class da01HashMap{ public static void main(String args[]){ HashMap<Integer,String> map=new HashMap<Integer,String>(); map.put(100,"Eric"); map.put(101,"Jack"); map.put(102,"Paul"); map.put(103, "Rose"); System.out.println("初始化HashMap: "+map); //删除元素 map.remove(100); System.out.println("更新后: "+map); //删除元素 map.remove(101); System.out.println("更新后: "+map); //删除元素 map.remove(102, "Paul"); System.out.println("更新后: "+map); } } ~~~ **运行结果:** 初始化HashMap: {100=Eric, 101=Jack, 102=Paul, 103=Rose} 更新后: {101=Jack, 102=Paul, 103=Rose} 更新后: {102=Paul, 103=Rose} 更新后: {103=Rose} <br> <br> ## **8 Java HashMap例子:replace()** ~~~java import java.util.*; class da01HashMap{ public static void main(String args[]){ HashMap<Integer,String> hm=new HashMap<Integer,String>(); hm.put(100,"Eric"); hm.put(101,"Jack"); hm.put(102,"Rose"); System.out.println("初始化HashMap:"); for(Map.Entry m:hm.entrySet()) { System.out.println(m.getKey()+" "+m.getValue()); } System.out.println("更新后:"); hm.replace(102, "Rose"); for(Map.Entry m:hm.entrySet()) { System.out.println(m.getKey()+" "+m.getValue()); } System.out.println("更新后:"); hm.replace(101, "Jack", "Mark"); for(Map.Entry m:hm.entrySet()) { System.out.println(m.getKey()+" "+m.getValue()); } System.out.println("更新后:"); hm.replaceAll((k,v) -> "Lucy"); for(Map.Entry m:hm.entrySet()) { System.out.println(m.getKey()+" "+m.getValue()); } } } ~~~ **运行结果:** 初始化HashMap: 100 Eric 101 Jack 102 Rose 更新后: 100 Eric 101 Jack 102 Rose 更新后: 100 Eric 101 Mark 102 Rose 更新后: 100 Lucy 101 Lucy 102 Lucy ## **9 HashSet和HashMap的区别** HashSet仅仅包含value值,而HashMap是key-value对象(键和值对)