简单的Map集合练习题

该博客讨论了如何使用Map接口实现类处理字符串数组中元素的判重问题。通过介绍Map常用方法,如put、get、keySet等,解释了Map中键对象不可重复而值对象可以重复的特性。博主提出三种方法,包括直接使用Map进行判重,转换为Set去重后再判重,以及在插入Map时检查键值是否存在。文章强调在大量数据下,利用Set去重能提高效率。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

需求:

 /**
     * 给定["a", "b", "a", "b", "c", "a", "b", "c", "b"]字符串数组,
     * 然后使用Map的key来保存数组中字符串元素,value保存该字符串元素的出现次数
     * 最后统计出各字符串元素的出现次数。
     */

思路:

看到计算出现次数这种需求,我们就需要想到判重,如何将一个字符串里的元素找出出现的次数

for循环遍历数组再装入Map数组里

Map接口实现类常用的方法:

Map接口实现类的方法都是关于键值对的操作

  • put(key,value) 向集合中添加元素

  • get(key) 根据键对象找到值对象

  • keySet() 得到键对象的集合

  • values() 得到值对象的集合

  • remave(key) 根据键对象移除整个元素

  • containsKey(key) 判断键对象在集合中是否存在

方法1代码:

String[] str = {"a", "b", "a", "b", "c", "a", "b", "c", "b"};
        Map<String, Integer> map = new HashMap();
        for (int i = 0; i < str.length; i++) {
            int count = 0;
            for (int j = 0; j < str.length; j++) {
                if (str[i].equals(str[j])) {
                    count++;
           
### Java集合框架基础练习题及答案 以下是一些Java集合框架的基础练习题及其解答,涵盖List、Set、Map等常见集合类型的基本操作。 #### 1. 使用List存储字符串并反转元素 编写一个程序,使用`ArrayList`存储字符串元素,并实现将集合中的元素反转的功能。 ```java import java.util.ArrayList; import java.util.List; public class ReverseListExample { public static void main(String[] args) { ArrayList<String> list = new ArrayList<>(); list.add("a"); list.add("b"); list.add("c"); list.add("d"); list.add("e"); list.add("f"); System.out.println("原始列表:" + list); reverseList(list); System.out.println("反转后的列表:" + list); } public static <E> void reverseList(List<E> list) { for (int i = 0; i < list.size() / 2; i++) { E temp = list.get(i); list.set(i, list.get(list.size() - 1 - i)); list.set(list.size() - 1 - i, temp); } } } ``` 运行结果: ``` 原始列表:[a, b, c, d, e, f] 反转后的列表:[f, e, d, c, b, a] ``` 此方法通过交换索引对称位置的元素实现反转,适用于任意类型的`List`集合[^2]。 #### 2. 使用Set存储唯一元素 编写一个程序,使用`HashSet`存储字符串,并验证集合中元素的唯一性。 ```java import java.util.HashSet; import java.util.Set; public class UniqueElementsExample { public static void main(String[] args) { Set<String> set = new HashSet<>(); set.add("apple"); set.add("banana"); set.add("apple"); // 重复元素 set.add("orange"); System.out.println("Set集合内容:" + set); } } ``` 运行结果: ``` Set集合内容:[banana, orange, apple] ``` `HashSet`会自动去重,因此重复的"apple"只出现一次[^1]。 #### 3. 使用Map存储键值对 编写一个程序,使用`HashMap`存储学生姓名和对应的成绩,并输出所有键值对。 ```java import java.util.HashMap; import java.util.Map; public class StudentScoresExample { public static void main(String[] args) { Map<String, Integer> scores = new HashMap<>(); scores.put("Alice", 85); scores.put("Bob", 92); scores.put("Charlie", 78); for (Map.Entry<String, Integer> entry : scores.entrySet()) { System.out.println(entry.getKey() + " : " + entry.getValue()); } } } ``` 运行结果: ``` Alice : 85 Bob : 92 Charlie : 78 ``` `HashMap`用于存储键值对,适用于需要快速查找的场景[^3]。 #### 4. 自定义对象实现Comparable接口 编写一个`Book`类,包含`name`和`price`属性,实现`Comparable`接口,并根据`price`进行排序。 ```java import java.util.*; class Book implements Comparable<Book> { private String name; private double price; public Book(String name, double price) { this.name = name; this.price = price; } public String getName() { return name; } public double getPrice() { return price; } @Override public int compareTo(Book other) { return Double.compare(this.price, other.price); } @Override public String toString() { return name + " - ¥" + price; } } public class BookSortingExample { public static void main(String[] args) { List<Book> books = new ArrayList<>(); books.add(new Book("Java编程思想", 99.5)); books.add(new Book("Effective Java", 79.0)); books.add(new Book("算法导论", 120.0)); Collections.sort(books); System.out.println("按价格排序的书籍列表:"); for (Book book : books) { System.out.println(book); } } } ``` 运行结果: ``` 按价格排序的书籍列表: Effective Java - ¥79.0 Java编程思想 - ¥99.5 算法导论 - ¥120.0 ``` 通过实现`Comparable`接口,可以定义对象的自然排序规则[^4]。 #### 5. 遍历Map的多种方式 展示三种不同的方式遍历`HashMap`。 ```java import java.util.*; public class MapTraversalExample { public static void main(String[] args) { Map<String, Integer> map = new HashMap<>(); map.put("A", 1); map.put("B", 2); map.put("C", 3); // 方法一:使用 keySet() System.out.println("遍历方式一(keySet):"); for (String key : map.keySet()) { System.out.println(key + " -> " + map.get(key)); } // 方法二:使用 entrySet() System.out.println("\n遍历方式二(entrySet):"); for (Map.Entry<String, Integer> entry : map.entrySet()) { System.out.println(entry.getKey() + " -> " + entry.getValue()); } // 方法三:使用 Java 8 的 forEach System.out.println("\n遍历方式三(forEach):"); map.forEach((key, value) -> System.out.println(key + " -> " + value)); } } ``` 以上三种方式分别使用了`keySet()`、`entrySet()`以及Java 8中的`forEach`方法进行遍历。 ---
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值