Java HashMap

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。

2 Java HashMap的层次结构

如上图所示,HashMap类继承了AbstractMap类并实现了Map接口。

3 Java HashMap的语法

public class HashMap<K,V> extends AbstractMap<K,V> implements Map<K,V>, Cloneable, Serializable  

4 Java HashMap的构造方法

构造方法 描述
HashMap() 用于构造默认的HashMap。
HashMap(Map<? extends K,? extends V> m) 用于通过使用给定Map对象的元素来初始化HashMap。
HashMap(int capacity) 用于将HashMap的容量初始化为给定的整数值。
HashMap(int capacity, float loadFactor) 用于通过使用其参数来初始化HashMap的容量和负载因子。

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(Object key, Object value) 用于在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<? super K,? super V,? extends V> remappingFunction) 用于计算指定键及其当前映射值的Map(如果没有当前映射,则为null)。
V computeIfAbsent(K key, Function<? super K,? extends V> mappingFunction) 如果指定的键尚未与值关联(或已映射为null),则使用给定的映射函数计算它的值,除非为null,否则将其输入到此Map中。
V computeIfPresent(K key, BiFunction<? super K,? super V,? extends V> remappingFunction) 如果指定键的值存在且非空,则用于给定键及其当前映射值的情况下计算新映射。
boolean containsValue(Object value) 如果Map中存在等于该值的某个值,则此方法返回true,否则返回false。
boolean containsKey(Object key) 如果Map中存在等于该键的某个键,则此方法返回true,否则返回false。
boolean equals(Object o) 用于将指定的Object与Map进行比较。
void forEach(BiConsumer<? super K,? super V> 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<? super V,? super V,? extends V> remappingFunction) 如果指定的键尚未与值关联或与null关联,请将其与给定的非null值关联。
V replace(K key, V value) 将指定的值替换为指定的键。
boolean replace(K key, V oldValue, V newValue) 用指定键的新值替换旧值。
void replaceAll(BiFunction<? super K,? super V,? extends V> function) 用在该条目上调用给定函数的结果替换每个条目的值,直到处理完所有条目或该函数引发异常为止。
Collection<V> values() 返回Map中所有value的Set集合。
int size() 返回Map的元素个数。

6 Java HashMap例子:add()

package com.yiidian;

/**
 * 一点教程网: http://www.yiidian.com
 */
/**
 * Java HashMap的例子
 */
import java.util.*;

class Demo{

    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

7 Java HashMap例子:remove()

package com.yiidian;

/**
 * 一点教程网: http://www.yiidian.com
 */
/**
 * Java HashMap的例子
 */
import java.util.*;

public class Demo {

    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}

8 Java HashMap例子:replace()

package com.yiidian;

/**
 * 一点教程网: http://www.yiidian.com
 */
/**
 * Java HashMap的例子
 */
import java.util.*;

class Demo{

    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对象(键和值对)。

推荐好课