常用Map集合

HeJin大约 2 分钟Java集合

Map集合概述

Map接口是双列集合的顶层接口:

public interface Map<K,V>  // K:键的类型 V: 值得类型
  • 存储的数据必须包含key和value。
  • key和value在Map集合中是一一对应的关系。一个key对应一个value。
  • key是不允许重复的。

HashMap

特点

  • 底层数据结构是哈希表。
  • 存储元素的顺序和遍历获取出来的顺序可能不一样。
  • key不会重复。

对象创建

// 创建一个空集合
public HashMap()

// 创建一个指定容量的集合    
public HashMap(int initialCapacity)    
public static void main(String[] args) {
    HashMap<String, String> map = new HashMap<>();
    HashMap<String, String> map1 = new HashMap<>(10);
}

常用方法

// 添加元素,如果key不存在就添加,如果key已经存在修改对应的value,并且返回修改前的value
public V put(K key, V value)

// 获取key对应的value,key不存在返回null    
public V get(Object key)   
    
// 根据key移除map中对应的键值对,并且把删除的值返回    
public V remove(Object key)

// 判断key是否存在
public boolean containsKey(Object key)
    
// 判断value是否存在    
public boolean containsValue(Object value)   
    
// 返回键值对的对数    
public int size()    
    
// 清空集合中的所有键值对    
public void clear() 
    
// 返回key的Set集合    
public Set<K> keySet()
    
// 返回value的Collection集合    
public Collection<V> values()    
    
// 返回map的键值对Map.Entry<K,V>对象的Set集合    
public Set<Map.Entry<K,V>> entrySet()    

遍历

entrySet遍历

public static void main(String[] args) {
    HashMap<String, String> map = new HashMap<>();
    map.put("1", "hello");
    map.put("2", "hashMap");

    Set<Map.Entry<String, String>> entries = map.entrySet();
    for (Map.Entry<String, String> entry : entries) {
        String key = entry.getKey();
        String value = entry.getValue();
        System.out.println(key + " -> " + value);
    }
}

keySet遍历

public static void main(String[] args) {
    HashMap<String, String> map = new HashMap<>();
    map.put("1", "hello");
    map.put("2", "hashMap");

    Set<String> keySet = map.keySet();
    for (String key : keySet) {
        String value = map.get(key);
        System.out.println(key + " -> " + value);
    }
}

HashMap集合key去重原理

HashMap在添加元素的时候会判断集合中有key和本次存入的key相同。判断的时候主要通过hashCodeequals方法。hashCode相同,并且equals判断也想通就会认为是同一个key。

image-20221108103336882
image-20221108103336882

所以如果我们要存储到HashMap的key是一个自定义类型。就需要根据清空判断下是否需要重写hashCodeequals方法。