Java集合基础知识必会(2)

Java集合基础知识 - Map

在Java集合框架中,Map是一种键值对(Key-Value)的数据结构。它提供了一种将键映射到值的方式,通过键可以快速定位和获取对应的值。在本文中,我们将介绍Map的相关知识,包括Map的特点、常用的实现类以及一些使用案例。

Map的特点

Map的特点如下:

  • 键值唯一性:每个键只能对应一个值,不允许重复的键。
  • 键值对存储:Map将键值对存储为一个整体,通过键来查找对应的值。
  • 无序性:Map中的键值对没有固定的顺序,不像List按顺序存储。
  • 高效查找:通过键可以快速定位和获取对应的值,平均时间复杂度为O(1)。
  • 可遍历性:可以遍历Map中的所有键值对,对其进行操作。

Map的常见实现类

Java提供了多种实现了Map接口的类,常见的有HashMap、TreeMap和LinkedHashMap。

HashMap

HashMap是基于哈希表实现的Map,它提供了快速的插入、删除和查找操作。下面是一个HashMap的简单示例:

import java.util.HashMap;
import java.util.Map;

public class HashMapExample {
    public static void main(String[] args) {
        Map<String, Integer> scores = new HashMap<>();

        scores.put("Alice", 90);
        scores.put("Bob", 80);
        scores.put("Charlie", 95);

        System.out.println("Scores: " + scores);

        // 获取指定键的值
        int aliceScore = scores.get("Alice");
        System.out.println("Alice's score: " + aliceScore);

        // 遍历所有键值对
        for (Map.Entry<String, Integer> entry : scores.entrySet()) {
            String student = entry.getKey();
            int score = entry.getValue();
            System.out.println(student + "'s score: " + score);
        }
    }
}

TreeMap

TreeMap是基于红黑树实现的有序Map,它按照键的自然顺序或指定的比较器来排序键值对。下面是一个TreeMap的简单示例:

import java.util.Map;
import java.util.TreeMap;

public class TreeMapExample {
    public static void main(String[] args) {
        Map<String, Integer> scores = new TreeMap<>();

        scores.put("Alice", 90);
        scores.put("Bob", 80);
        scores.put("Charlie", 95);

        System.out.println("Scores: " + scores);

        // 获取指定键的值
        int aliceScore = scores.get("Alice");
        System.out.println("Alice's score: " + aliceScore);

        // 遍历所有键值对
        for (Map.Entry<String, Integer> entry : scores.entrySet()) {
            String student = entry.getKey();
            int score = entry.getValue();
            System.out.println(student + "'s score: " + score);
        }
    }
}

LinkedHashMap

LinkedHashMap是基于哈希表和双向链表实现的有序Map,它能够保持插入顺序或访问顺序。下面是一个LinkedHashMap的简单示例:

import java.util.LinkedHashMap;
import java.util.Map;

public class LinkedHashMapExample {
    public static void main(String[] args) {
        Map<String, Integer> scores = new LinkedHashMap<>();

        scores.put("Alice", 90);
        scores.put("Bob", 80);
        scores.put("Charlie", 95);

        System.out.println("Scores: " + scores);

        // 获取指定键的值
        int aliceScore = scores.get("Alice");
        System.out.println("Alice's score: " + aliceScore);

        // 遍历所有键值对
        for (Map.Entry<String, Integer> entry : scores.entrySet()) {
            String student = entry.getKey();
            int score = entry.getValue();
            System.out.println(student + "'s score: " + score);
        }
    }
}

使用案例

下面是一个使用Map解决实际问题的案例,假设我们要统计一段文本中单词出现的频次:

import java.util.HashMap;
import java.util.Map;

public class WordFrequency {
    public static void main(String[] args) {
        String text = "Java is a popular programming language. It is widely used in software development.";

        // 将文本按空格分割成单词数组
        String[] words = text.split(" ");

        // 创建一个Map来存储单词和其出现的频次
        Map<String, Integer> frequencyMap = new HashMap<>();

        // 遍历单词数组,统计单词的频次
        for (String word : words) {
            // 将单词转为小写,忽略大小写的差异
            String lowercaseWord = word.toLowerCase();

            // 如果单词已经在Map中,则更新其频次加一;否则,将单词添加到Map中并将频次设置为1
            frequencyMap.put(lowercaseWord, frequencyMap.getOrDefault(lowercaseWord, 0) + 1);
        }

        // 输出每个单词及其频次
        for (Map.Entry<String, Integer> entry : frequencyMap.entrySet()) {
            String word = entry.getKey();
            int frequency = entry.getValue();
            System.out.println(word + ": " + frequency);
        }
    }
}

运行以上代码,输出结果如下:

java: 1
is: 1
it: 1
programming: 1
used: 1
a: 1
widely: 1
language.: 1
software: 1
development.: 1
popular: 1
in: 1

该案例演示了如何使用Map来统计文本中单词的频次。通过遍历文本分割出的单词数组,将单词作为键存入Map中,并使用getOrDefault方法来获取单词的当前频次,然后更新频次并重新放入Map中。最后,遍历Map,输出每个单词及其频次。

总结:

Map是Java集合框架中重要的一部分,它提供了一种键值对存储和查找的方式。通过使用不同的Map实现类,我们可以根据需求选择不同的特性,如HashMap提供快速插入、删除和查找操作,TreeMap提供有序访问,LinkedHashMap保持顺序等。在实际应用中,Map常用于解决需要以键值对存储和检索数据的问题,如统计频次、缓存数据等。熟练掌握Map的用法,能够提高代码的效率和可读性,使我们的开发工作更加高效。

希望本文对你了解和使用Map有所帮助!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

竹山全栈

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值