Map集合练习

map

Map是Java中的一个接口,用于存储键值对(key-value pair)的集合。它提供了一种通过键(key)快速访问值(value)的方式,并且不允许键的重复(每个键最多只能对应一个值)。Map接口在Java的集合框架中属于顶层接口,常见的实现类有HashMap、TreeMap、LinkedHashMap等。
Map的常用方法包括:

1.put(key, value): 向Map中添加键值对。
2.get(key): 根据键获取对应的值。
3.containsKey(key): 判断Map是否包含指定的键。
4.containsValue(value): 判断Map是否包含指定的值。
5.remove(key): 删除Map中指定键对应的键值对。
6.size(): 返回Map中键值对的数量。
7.keySet(): 返回Map中所有键的集合。
8.values(): 返回Map中所有值的集合。
9.entrySet(): 返回Map中所有键值对(Entry)的集合。

练习内容 

1.使用Map接口的实现类完成员工工资(姓名–工资)的摸拟: (1)添加几条信息 (2)列出所有的员工姓名 (3)列出所有员工姓名及其工资 (4)删除名叫“Tom”的员工信息 (5)输出Jack的工资,并将其工资加1000元(通过取值实现) (6)将所有工资低于1000元的员工的工资上涨20%(通过取值实现)

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

public class EmployeeSalary {
    public static void main(String[] args) {
        // 创建Map对象保存员工姓名和工资
        Map<String, Integer> salaryMap = new HashMap<>();

        // 添加几条信息
        salaryMap.put("Tom", 5000);
        salaryMap.put("Jack", 6000);
        salaryMap.put("Alice", 7000);
        salaryMap.put("John", 4500);

        // 列出所有的员工姓名
        System.out.println("所有员工姓名:");
        for (String name : salaryMap.keySet()) {
            System.out.println(name);
        }

        // 列出所有员工姓名及其工资
        System.out.println("\n所有员工姓名及其工资:");
        for (Map.Entry<String, Integer> entry : salaryMap.entrySet()) {
            System.out.println(entry.getKey() + ":" + entry.getValue());
        }

        // 删除名叫“Tom”的员工信息
        salaryMap.remove("Tom");

        // 输出Jack的工资,并将其工资加1000元
        int jackSalary = salaryMap.get("Jack");
        System.out.println("\nJack的工资:" + jackSalary);
        salaryMap.put("Jack", jackSalary + 1000);
        System.out.println("加薪后Jack的工资:" + salaryMap.get("Jack"));

        // 将所有工资低于1000元的员工的工资上涨20%
        for (String name : salaryMap.keySet()) {
            int salary = salaryMap.get(name);
            if (salary < 1000) {
                salaryMap.put(name, (int) (salary * 1.2));
            }
        }

        // 打印所有员工姓名及其工资(包括上涨后的工资)
        System.out.println("\n所有员工姓名及其工资(包括上涨后的工资):");
        for (Map.Entry<String, Integer> entry : salaryMap.entrySet()) {
            System.out.println(entry.getKey() + ":" + entry.getValue());
        }
    }
}

2.使用HashMap类实例化一个Map类型的对象m1,键(String类型)和值(int型)分别用于存储员工的姓名和工资,存入数据如下:
张三——800元;李四——1500元;王五——3000元;
1)将张三的工资更改为2600元
2)为所有员工工资加薪100元;
3)遍历集合中所有的员工
4)遍历集合中所有的工资
5)对员工按照工资进行排序

import java.util.*;

public class EmployeeMapExample {
    public static void main(String[] args) {
        // 实例化HashMap对象m1
        Map<String, Integer> m1 = new HashMap<>();

        // 存储员工的姓名和工资
        m1.put("张三", 800);
        m1.put("李四", 1500);
        m1.put("王五", 3000);

        // 1)将张三的工资更改为2600元
        m1.put("张三", 2600);

        // 2)为所有员工工资加薪100元
        for (String key : m1.keySet()) {
            int salary = m1.get(key);
            m1.put(key, salary + 100);
        }

        // 3)遍历集合中所有的员工
        System.out.println("所有员工的姓名:");
        for (String key : m1.keySet()) {
            System.out.println(key);
        }

        // 4)遍历集合中所有的工资
        System.out.println("所有员工的工资:");
        for (int salary : m1.values()) {
            System.out.println(salary);
        }

        // 5)对员工按照工资进行排序
        List<Map.Entry<String, Integer>> sortedList = new ArrayList<>(m1.entrySet());
        Collections.sort(sortedList, new Comparator<Map.Entry<String, Integer>>() {
            @Override
            public int compare(Map.Entry<String, Integer> entry1, Map.Entry<String, Integer> entry2) {
                return entry1.getValue().compareTo(entry2.getValue());
            }
        });

        System.out.println("按工资排序的员工信息:");
        for (Map.Entry<String, Integer> entry : sortedList) {
            String name = entry.getKey();
            int salary = entry.getValue();
            System.out.println("姓名:" + name + ",工资:" + salary);
        }
    }
}

3.利用已学集合知识,选择合适的结构完成简易学生管理系统,要求实现:增删改查功能《并注明为何使用该结构》

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

public class StudentManagementSystem {
    private Map<Integer, String> studentMap;

    public StudentManagementSystem() {
        studentMap = new HashMap<>();
    }

    public void addStudent(int id, String name) {
        studentMap.put(id, name);
    }

    public void removeStudent(int id) {
        studentMap.remove(id);
    }

    public void updateStudent(int id, String newName) {
        studentMap.put(id, newName);
    }

    public String findStudent(int id) {
        return studentMap.get(id);
    }

    public void printAllStudents() {
        System.out.println("学生列表:");
        for (Map.Entry<Integer, String> entry : studentMap.entrySet()) {
            System.out.println("学生ID:" + entry.getKey() + ",姓名:" + entry.getValue());
        }
    }

    public static void main(String[] args) {
        StudentManagementSystem system = new StudentManagementSystem();
        Scanner scanner = new Scanner(System.in);
        boolean running = true;

        while (running) {
            System.out.println("\n请选择操作:");
            System.out.println("1. 添加学生");
            System.out.println("2. 删除学生");
            System.out.println("3. 更新学生信息");
            System.out.println("4. 查找学生");
            System.out.println("5. 显示所有学生");
            System.out.println("0. 退出系统");

            int choice = scanner.nextInt();
            switch (choice) {
                case 1:
                    System.out.println("请输入学生ID:");
                    int id = scanner.nextInt();
                    System.out.println("请输入学生姓名:");
                    String name = scanner.next();
                    system.addStudent(id, name);
                    System.out.println("添加成功!");
                    break;
                case 2:
                    System.out.println("请输入要删除的学生ID:");
                    int idToDelete = scanner.nextInt();
                    system.removeStudent(idToDelete);
                    System.out.println("删除成功!");
                    break;
                case 3:
                    System.out.println("请输入要更新的学生ID:");
                    int idToUpdate = scanner.nextInt();
                    System.out.println("请输入新的学生姓名:");
                    String newName = scanner.next();
                    system.updateStudent(idToUpdate, newName);
                    System.out.println("更新成功!");
                    break;
                case 4:
                    System.out.println("请输入要查找的学生ID:");
                    int idToFind = scanner.nextInt();
                    String foundStudent = system.findStudent(idToFind);
                    if (foundStudent != null) {
                        System.out.println("学生ID:" + idToFind + ",姓名:" + foundStudent);
                    } else {
                        System.out.println("未找到对应的学生!");
                    }
                    break;
                case 5:
                    system.printAllStudents();
                    break;
                case 0:
                    System.out.println("感谢使用学生管理系统,再见!");
                    running = false;
                    break;
                default:
                    System.out.println("无效的操作!");
                    break;
            }
        }

        scanner.close();
    }
}

4.封装一个新闻类News,包含新闻标题,新闻作者,新闻内容,新闻类型三个属性,提供必要的访问器和修改器方法,重写toString方法,要求打印对象时输出格式为“标题;类型;作者”,要求只要新闻标题相同就判断为同一条新闻。在测试类中创建一个只能容纳该类对象的ArrayList集合,添加三条新闻。遍历集合,打印新闻标题,将新闻标题截取字符串到10个汉字的长度。

import java.util.ArrayList;
import java.util.List;

public class News {
    private String title;
    private String author;
    private String content;
    private String type;

    public News(String title, String author, String content, String type) {
        this.title = title;
        this.author = author;
        this.content = content;
        this.type = type;
    }

    public String getTitle() {
        return title;
    }

    public void setTitle(String title) {
        this.title = title;
    }

    public String getAuthor() {
        return author;
    }

    public void setAuthor(String author) {
        this.author = author;
    }

    public String getContent() {
        return content;
    }

    public void setContent(String content) {
        this.content = content;
    }

    public String getType() {
        return type;
    }

    public void setType(String type) {
        this.type = type;
    }

    @Override
    public String toString() {
        return title + ";" + type + ";" + author;
    }

    @Override
    public boolean equals(Object obj) {
        if (this == obj) {
            return true;
        }
        if (obj == null || getClass() != obj.getClass()) {
            return false;
        }
        News news = (News) obj;
        return title.equals(news.title);
    }

    @Override
    public int hashCode() {
        return title.hashCode();
    }

    public static void main(String[] args) {
        List<News> newsList = new ArrayList<>();

        // 添加三条新闻
        newsList.add(new News("中国队获得冠军", "记者A", "中国队在国际比赛中荣获冠军", "体育"));
        newsList.add(new News("新科技改变生活", "记者B", "新科技正在改变人们的生活方式", "科技"));
        newsList.add(new News("财经界大佬出访", "记者C", "财经界大佬出访推动经济合作", "财经"));

        // 遍历集合,打印新闻标题并截取为10个汉字长度
        for (News news : newsList) {
            System.out.println(news.getTitle().substring(0, Math.min(10, news.getTitle().length())));
        }
    }
}

5.开发一个泛型Apple类,要求有一个重量属性weight在测试类中实例化不同的泛型对象,要求对象a1的这一属性是String类型,对象a2的这一属性是Integer型,a3的这一属性是Double型。分别为a1,a2,a3的重量属性赋值为:”500克”,500,500.0,在测试类中通过对象调用访问器得到属性值并输出。另外思考,为什么a2和a3的属性需要是Integer和Double而不是int和double?

public class Apple<T> {
    private T weight;

    public T getWeight() {
        return weight;
    }

    public void setWeight(T weight) {
        this.weight = weight;
    }

    public static void main(String[] args) {
        Apple<String> a1 = new Apple<>();
        a1.setWeight("500克");
        System.out.println(a1.getWeight());

        Apple<Integer> a2 = new Apple<>();
        a2.setWeight(500);
        System.out.println(a2.getWeight());

        Apple<Double> a3 = new Apple<>();
        a3.setWeight(500.0);
        System.out.println(a3.getWeight());
    }
}

希望这篇文章会帮助到大家,不懂的也可以私信我。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值