Java常用类(HashMap)

2

Java常用类(HashMap)

  今天给小伙伴们介绍HashMap类,HashMap是Java专门用于处理字典的类,和C++中的map,或者Python中的dict相同。其特点是双列集合,一个元素包含两个值,一个称为key,一个称为value,key的底层是哈希表,不允许存储重复元素,无序,无法索引,因此无法使用普通的for循环,通常的使用场景是根据key得到value对应的值。在Java中也内置了许多常用的算法,在刷题时常常使用它。

HashMap类

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
package demo01;

import java.util.Collection;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;

public class HashMapClass {
public static void print(HashMap<Integer, String> h) {
for (Map.Entry<Integer, String> e: h.entrySet()) {
//Map.Entry<K,V>类型的getKey()方法可以取出对象的key,getValue()方法可以取出对象的value
System.out.println(e.getKey() + ": " + e.getValue());
}
}

public static void main(String[] args) {
//注意:如果想用HashMap中的key存储自定义类型,和HashSet中存储自定义类型相同,需要重写对象中的hashCode方法和equals方法。
//还可以创建LinkedHashMap类型,和HashMap几乎相同,但是LinkedHashMap底层是一个链表和一个哈希表,链表的作用是记录元素第一次出现的位置,因此元素是有序的。
HashMap<Integer, String> h = new HashMap<>();
//public V put(K key, V value) 给key:value放入字典中
h.put(1, "Momday");
h.put(2, "Tuesday");
h.put(3, "Wenesday");

System.out.println("初始时字典h:");
print(h);

//public int size() 查看字典的大小
System.out.println("字典h的大小为:" + h.size());

//当插入的键值对的key已经存在于字典中,如果值不同,则会覆盖之前的值。
h.put(1, "Monday");
//public V replace(K key, V value) 将键对应的值进行修改。
h.replace(3, "wednesday");
System.out.print("修改后字典h:");
System.out.println(h);

//public boolean containsKey(Object key) 查看字典中是否包含key
System.out.println("字典h的key是否包含4:" + h.containsKey(4));

//public boolean containsValue(Object value) 查看字典中是否包含value
System.out.println("字典h的value是否包含星期二:" + h.containsValue("Tuesday"));

//public V get(Object key) 获取字典中key对应的value
System.out.print("星期三的英文单词是:" + h.get(3));

//public V getOrDefault(Object key, V defaultValue) 获取字典中key对应的value,如果没有则返回默认value
System.out.print("星期四的英文单词是:" + h.getOrDefault(4, "Thursday"));

//public boolean remove(Object key, Object value) 移除字典中键值对,如果不存在则不移除。
System.out.print("字典h删除3:Wenesday是否成功:" + h.remove(3, "Wenesday"));

//public V remove(Object key) 移除字典中key对应的键值对,如果不存在则不移除。
h.remove(3);
System.out.print("删除星期三的单词后字典h:");
System.out.println(h);

//public Set<K> keySet() 获取字典中key的Set集合
Set<Integer> hKey = h.keySet();
System.out.print("字典h的key:");
System.out.println(hKey);

//public Collection<V> values() 获取字典中value的Collection集合
Collection<String> hValue = h.values();
System.out.print("字典h的value:");
System.out.println(hValue);

//public Set<Map.Entry<K,V>> entrySet() 获取字典中的键值对的Set集合,其中每一个对象是一个Map.Entry<K,V>类型
Set<Map.Entry<Integer, String>> e = h.entrySet();
System.out.print("字典h的key & value:");
System.out.println(e);

HashMap<Integer, String> h1 = new HashMap<>();
h1.put(3, "Wednesday");
h1.put(4, "Thursday");
h1.put(5, "Friday");
System.out.print("初始时字典h1:");
System.out.println(h1);

//public void putAll(Map<? extends K, ? extends V> m) 将字典m合并到当前字典中,重复key对应的value会被替换
h.putAll(h1);
System.out.print("h合并h1后:");
System.out.println(h);

//public void clear() 清空字典
h.clear();
System.out.print("移除所有元素后,字典h:");
System.out.println(h);

//public boolean isEmpty() 判断字典是否为空
System.out.println("字典h是否为空:" + h.isEmpty());
System.out.println("字典h的大小为:" + h.size());
}
}

1

Java小结

  字典无法通过索引下标进行遍历。使用字典时,只要记住4个重要的函数put,remove,containsKey,get即可。常常在数组中出现,如统计每一个元素出现的次数,遇到新元素时加入字典中,遇到旧元素,则对应的value加1即可,非常方便。到目前位置Java中常用的一些集合类就讲完了,一些特定场景使用的类需要小伙伴们在刷题的时候多多总结和积累,再次强调的是,编程是一门实践课程而不是理论课,要想真正的提高,一定要多加训练。

-------------本文结束感谢您的阅读-------------
0%