前言:
HashMap所代表的数据结构是使用键值对存储数据的一类数据结构,HashMap具备键唯一且可为空的特点,借助一个图来描述这个数据结构:
HashMap的主要方法:
1,构造方法:
小伙伴不要怯于阅读英文文档,多观察一会就会发现文档的排布是有非常强的规律性的,以上图为例,HashMap的构造方法主要有四个,每个方法后面都规定的需要添加的参数,并且每个构造方法的下面都带有方法的描述,此处讲最经常使用的构造方法即第一个,该构造方法不需要任何参数,方法描述中已经说明了这个构造方法默认设置了16位的初始容量并且负载因子为0.75。由于此处是操作简介,故不深入讲解初始容量和负载因子的设置,在使用时无需担心容量不足,但HashMap中的数据量达到扩容阈值时就会触发扩容机制,自主设置这两个值可以更好的匹配不同数据的结构和数据存储特点。
2,读写操作
put(K key, V value),get(K key)
这两个方法是HashMap的读写操作,写入时需要key,value,读操作是需要通过 key 来获取对应的value值。
示例代码:
public static void main(String[] args) {
HashMap<String, String> hashMap = new HashMap<>();
hashMap.put("钥匙1","钥匙1对应的门1");
hashMap.put("钥匙2","钥匙2对应的门2");
hashMap.put("钥匙3","钥匙3对应的门3");
System.out.println(hashMap.get("钥匙1"));
System.out.println(hashMap.get("钥匙2"));
System.out.println(hashMap.get("钥匙3"));
}
运行结果:
3,移除键值对方法
3.1 移除所有键值对
clean()
该方法的作用是抹除表中的所用映射关系,示例代码:
public static void main(String[] args) {
HashMap<String, String> hashMap = new HashMap<>();
hashMap.put("钥匙1","钥匙1对应的门1");
hashMap.put("钥匙2","钥匙2对应的门2");
hashMap.put("钥匙3","钥匙3对应的门3");
System.out.println("before clear(): "+hashMap.toString());
hashMap.clear();
System.out.println("after clear(): "+hashMap.toString());
}
此处使用toString()方法可以查看HashMap中所有的映射关系。
3.2 移除或修改单个映射
clear() 是对所有映射关系的清楚,那么有什么方法是移除单个键值对或者修改某个键的值的呢。
移除某个键值对:remove(K key);
修改某个键的值:replace(K key, V value);
示例代码:
public static void main(String[] args) {
HashMap<String, String> hashMap = new HashMap<>();
hashMap.put("钥匙1","钥匙1对应的门1");
hashMap.put("钥匙2","钥匙2对应的门2");
hashMap.put("钥匙3","钥匙3对应的门3");
System.out.println(hashMap.toString());
hashMap.remove("钥匙1");
hashMap.replace("钥匙2","这个门被偷了");
System.out.println(hashMap.toString());
}
4,获取键/键值对合集
4.1 获取键合集
keySet()
4.2 获取键值对合集
entrySet();
示例代码:
public static void main(String[] args) {
HashMap<String, String> hashMap = new HashMap<>();
hashMap.put("钥匙1","钥匙1对应的门1");
hashMap.put("钥匙2","钥匙2对应的门2");
hashMap.put("钥匙3","钥匙3对应的门3");
Set<String> set = hashMap.keySet();
Set<Map.Entry<String, String>> set2 = hashMap.entrySet();
System.out.println(set.toString());
System.out.println(set2.toString());
}
5,其他方法
5.1 containsKey(Object key) 检查是否包含键 key
5.2 containsValue(Object value) 检查是否包含值 value
5.3 isEmpty() 检查HashMap是否为空
5.4 size() 获取HashMap中键值对个数
public static void main(String[] args) {
HashMap<String, String> hashMap = new HashMap<>();
hashMap.put("钥匙1","钥匙1对应的门1");
hashMap.put("钥匙2","钥匙2对应的门2");
hashMap.put("钥匙3","钥匙3对应的门3");
System.out.println("5.1 --+--+--+--+--+--");
System.out.println("是否包含键\"钥匙1\":"+hashMap.containsKey("钥匙1"));
System.out.println("是否包含键”钥匙4“:"+hashMap.containsKey("钥匙4"));
System.out.println("5.2 --+--+--+--+--+--");
System.out.println("是否包含键\"钥匙1对应的门1\":"+hashMap.containsValue("钥匙1对应的门1"));
System.out.println("是否包含键\"钥匙4对应的门4\":"+hashMap.containsValue("钥匙4对应的门4"));
System.out.println("5.3 --+--+--+--+--+--");
System.out.println("hashMap中是否无键值对"+hashMap.isEmpty());
System.out.println("5.4 --+--+--+--+--+--");
System.out.println("hashMap中键值对的个数为: "+hashMap.size());
}