hashMap
特点:
无序、key唯一、value允许重复、key和value允许为null
方法:
添加元素:put(K,V)
删除元素:1、remove(key) 通过key来 删除整个键值对;2、remove(key,value) 通过key+value 删除整个键值对
获取元素:1、get(key) 通过key,获取value ;2、keySet() Set类型 获取所有的key;3、values() Collection类型 获取所有的values
替换元素: replace(key, NewValue) 通过key,替换value值
键值对存在与否 :1、 containsKey(key)是否存在某个key ; 2、.containsValue(value)是否存在某个value
hashMap存储方式 :
以 node<K,V>[ ] 数组 和 链表的形式存储,通过key的哈希值 ,来计算数组中存储的下标位置(index)如下图:
若当index重复是,以单向链表的形式存储元素如下图:
hashmap的相关应用 :
1、求字符串重复元素的个数,示例代码如下:
import java.util.HashMap;
public class Test03 {
// hashMap 求字符串重复元素的个数
public static void main(String[] args) {
String string= "utzsexdrcfvgybhunjrxdcfvgbhesxdrcfvgybdrcfvtgbhn";
System.out.println(count(string));
}
public static HashMap<String, Integer> count(String str) {
//创建一个hashmap对象
HashMap<String, Integer> result = new HashMap<String, Integer>();
for (int i = 0; i < str.length(); i++) {
//将得到的字符作为key存储到hashmap中
String key = String.valueOf(str.charAt(i));
//判断是否存在重复的key,有则+1
if (result.containsKey(key)) {
result.put(key, result.get(key)+1);
}else {
result.put(key, 1);
}
}
return result;
}
}
输出结果如下:
2、当key相同 ,value值相加 ,示例代码如下:
import java.util.HashMap;
import java.util.Scanner;
public class Test04 {
public static void main(String[] args) {
//key相同 ,,值相加
HashMap<String, Integer> result = new HashMap<String, Integer>();
try (Scanner sc = new Scanner(System.in)) {
for (int i = 0; i < 5; i++) {
String key = sc.next();
int value = sc.nextInt();
//方式1
if (result.containsKey(key)) {
result.put(key, result.get(key)+value);
}else {
result.put(key, value);
}
//方式2
result.put(key, result.getOrDefault(key, 0)+value);
}
System.out.println(result);
}
}
}
输出结果如下: