Java Map增删改查
示例代码:
学生类
package com.imooc.collection; import java.util.HashSet; import java.util.Set; /** * 学生类 * Set中的元素是唯一的,不会重复,但是没有顺序。 */ public class Student { private String id; private String name; // set集合只能使用 foreach 或 iterator进行遍历,不能使用get()来获取元素 public Set <Course> course; public Student(){ } public Student(String id, String name){ this.id = id; this.name = name; this.course = new HashSet<>(); } public void setId(String id) { this.id = id; } public void setName(String name) { this.name = name; } public void setCourse(Set<Course> course) { this.course = course; } public String getId() { return id; } public String getName() { return name; } public Set getCourse() { return this.course; } }
学生集合
package com.imooc.map; import com.imooc.collection.Student; import java.util.HashMap; import java.util.Map; import java.util.Scanner; import java.util.Set; public class MapTest { /** * 用来承装学生类型对象 */ private final Map<String, Student> students = new HashMap<>(); /** * 在构造器中初始化students属性 */ public MapTest(){ } /** * 测试添加:输入学生ID,判断是否被占用 * 若未被占用,则输入姓名,创建新学生对象,并且添加到Students中 */ private void testPut(){ // 创建一个Scanner对象,用来获取输入的学生ID和姓名 Scanner console = new Scanner(System.in); int i = 0; while (i < 3){ System.out.println("请输入学生ID:"); String ID = console.next(); // 判断该ID是否被占用 Student st = students.get(ID); if (st == null) { // 提示输入学生姓名 System.out.println("请输入学生姓名:"); String name = console.next(); // 创建新的学生对象 Student newStudent = new Student(ID, name); // 通过调用students的put方法,添加ID-学生映射 students.put(ID, newStudent); System.out.println("成功添加学生:" + students.get(ID).getName()); i ++; } else { System.out.println("该学生ID已被占用!"); } } } /** * 通过keySet方法来遍历Map */ private void testKeySet(){ // 通过keySet方法,获取Map中所有的"键"集合 Set<String> keySet = students.keySet(); System.out.println("共获取:" + keySet.size() + " 个学生!"); // 通过Key从Students中获取Student对象 for(String stuId: keySet){ Student st = students.get(stuId); System.out.println("学生ID:" + st.getId() + "; 学生姓名:" + st.getName()); } } /** * 通过 entrySet方法来遍历Map */ private void testEntrySet(){ // 通过entrySet方法,返回Map中的所有"键值对" Set<Map.Entry<String, Student>> entrySet = students.entrySet(); for(Map.Entry<String, Student> entry: entrySet){ System.out.println("从EntrySet中获取键:" + entry.getKey()); System.out.println("从EntrySet中获取值:" + entry.getValue().getName()); } } /** * 测试删除Map中的元素 */ private void testRemove(){ // 提示输入待删除学生的ID Scanner console = new Scanner(System.in); while(true){ System.out.println("请输入要删除的学生ID:"); String ID = console.next(); Student st = students.get(ID); if (st == null) { System.out.println("该ID不存在!"); continue; } students.remove(ID); System.out.println("成功删除学生:" + st.getName()); break; } } /** * 测试修改Map中的元素: replace or put 都可以实现 */ private void testModify(){ // 提示输入待修改的学生ID Scanner console = new Scanner(System.in); while (true){ System.out.println("请输入要修改的学生ID:"); String ID = console.next(); Student st = students.get(ID); if (st == null) { System.out.println("该学生ID不存在,请重新输入!"); } else { System.out.println("请输入要修改的学生姓名:"); String name = console.next(); Student newST = new Student(ID, name); students.replace(ID, newST); break; } } } public static void main(String[] args){ MapTest mt = new MapTest(); mt.testPut(); mt.testKeySet(); mt.testRemove(); mt.testEntrySet(); mt.testModify(); mt.testEntrySet(); } }