[Java] 映射 (Map)

关于映射有3个具体类:HashMapLinkedHashMap, 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.

猜你喜欢

转载自blog.csdn.net/ftell/article/details/80830573