关于映射有3个具体类:HashMap
,LinkedHashMap
, TreeMap
映射有键/值对组成,key不能重复。
HashMap
是无序的。
但是LinkedHashMap
中的记录要么按插入顺序检索,要么按最近访问检索,没怎么被访问的排前面,最近被访问的排后面,无参构造函数默认是按插入顺序检索元素。如果要按照被访问顺序检索,那么使用构造函数LinkedHashMap(initialCapacity, loadFactor, true)
, loadFactor
可设为0.7, initialCapacity
可设为16.
TreeMap
有序。
import java.util.*;
public class TestMap {
public static void main(String[] args) {
// Create a HashMap
Map<String, Integer> hashMap = new HashMap<String, Integer>();
hashMap.put("Smith", 30);
hashMap.put("Anderson", 31);
hashMap.put("Lewis", 29);
hashMap.put("Cook", 29);
System.out.println("Display entries in HashMap");
System.out.println(hashMap + "\n");
// Create a TreeMap from the preceding HashMap
Map<String, Integer> treeMap = new TreeMap<String, Integer>(hashMap);
System.out.println("TreeMap: Display entries in ascending order of key");
System.out.println(treeMap);
// Create a LinkedHashMap
Map<String, Integer> linkedHashMap = new LinkedHashMap<String, Integer>(16, 0.75f, true);
linkedHashMap.put("Smith", 30);
linkedHashMap.put("Anderson", 31);
linkedHashMap.put("Lewis", 29);
linkedHashMap.put("Cook", 29);
// Display the age for Lewis
System.out.println("\nThe age for " + "Lewis is " + linkedHashMap.get("Lewis"));
System.out.println("Display entries in LinkedHashMap");
System.out.println(linkedHashMap);
}
}
输出如下:
Display entries in HashMap
{Smith=30, Lewis=29, Anderson=31, Cook=29}
TreeMap: Display entries in ascending order of key
{Anderson=31, Cook=29, Lewis=29, Smith=30}
The age for Lewis is 29
Display entries in LinkedHashMap
{Smith=30, Anderson=31, Cook=29, Lewis=29}
另一个例子,统计字符串中的文字出现的次数,不区分大小写。
public class CountOccurrenceOfWords {
public static void main(String[] args) {
// Set text in a string
String text = "Good morning. Have a good class. " + "Have a good visit. Have fun!";
Map<String, Integer> map = new TreeMap<String, Integer>();
String[] words = text.split("[ ,.;!\n\t\r { }]"); // 使用了正则表达式
for (int i = 0; i < words.length; i++) {
String key = words[i].toLowerCase();
if (key.length() > 0) {
if (!map.containsKey(key))
map.put(key, 1);
else {
int value = map.get(key);
value++;
map.put(key, value);
}
}
}
Set<Map.Entry<String, Integer>> entrySet = map.entrySet();
for (Map.Entry<String, Integer> entry: entrySet)
System.out.println(entry.getValue() + "\t" + entry.getKey());
}
}
输出如下:
2 a
1 class
1 fun
3 good
3 have
1 morning
1 visit
[1] Introduction to Java Programming 10th. edition Chapter 21.