欢迎访问宙启技术站
智能推送

Java HashMap类中的put()方法

发布时间:2023-05-29 01:22:24

Java HashMap是一个基于哈希表的Map接口实现类,它允许使用null作为key和value,并按照哈希算法来存储和访问元素。在HashMap中,put()方法是用来添加元素的,本文将详细介绍put()方法的使用方式和实现原理。

方法定义

HashMap中的put()方法有两种重载方式:

1. put(K key, V value)

该方法将一个key-value对添加到HashMap中,如果key已经存在于Map中,则会将原有value替换成新的value,返回值为旧的value,否则返回null。

2. putAll(Map<? extends K, ? extends V> m)

该方法将一个Map中的所有元素添加到当前HashMap中,如果有重复的key,则会将原有value替换成新的value。

使用示例

下面是针对HashMap的put()方法的一些示例。

1. 添加元素

HashMap<Integer, String> map = new HashMap<>();
map.put(1, "Java");
map.put(2, "Python");
map.put(3, "C++");
System.out.println(map); //{1=Java, 2=Python, 3=C++}

2. 替换元素

HashMap<Integer, String> map = new HashMap<>();
map.put(1, "Java");
String oldValue = map.put(1, "Java SE");
System.out.println(oldValue); //Java
System.out.println(map); //{1=Java SE}

3. 添加多个元素

HashMap<Integer, String> map = new HashMap<>();
Map<Integer, String> subMap = new HashMap<>();
subMap.put(1, "Java");
subMap.put(2, "Python");
subMap.put(3, "C++");
map.putAll(subMap);
System.out.println(map); //{1=Java, 2=Python, 3=C++}

实现原理

HashMap的put()方法涉及到了哈希算法、链表和红黑树等知识。

1. 添加元素

当我们向HashMap中添加一个元素时,首先根据key的hashCode计算出这个元素在数组中的位置,如果对应位置上已经有元素,则会将新元素添加到链表或红黑树上。如果该位置为空,则直接在该位置上添加新元素,并更新元素个数(size)。

2. 替换元素

当我们用已经存在的key替换原有value时,HashMap会先找到对应的节点,然后将其value替换成新的value并返回旧的value,如果没有找到,则直接添加新元素。

3. 扩容

当HashMap中的元素个数超过了容量的75%时,会自动进行扩容,这也是put()方法比较耗时的原因。在扩容时,HashMap会重新计算每个元素在新数组中的位置,并将元素复制到新数组上,同时将链表转换成红黑树(如果链表的长度超过了8)。

总结

Java HashMap的put()方法是向Map中添加或替换元素的重要方法,它采用了哈希算法、链表和红黑树等数据结构来存储和访问元素。在使用时,我们需要注意HashMap的扩容机制,避免频繁扩容造成性能问题。