Java 之集合框架 中(10)

Posted 风中的簌雨

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java 之集合框架 中(10)相关的知识,希望对你有一定的参考价值。

Map和HashMap

Map接口:
Map 提供了一种映射关系,其中的元素是以键值对(Key-Value)的形式
存储的,能够实现根据Key快速查找value
Map中的键值对以Evtry类型的对象实例形式存在
键值(Key) 不可重复,value值可以重复
每个键最多只能映射到一个值
Map接口提供了返回key值集合,value集合以及Entry(键值对)集合的方法
Map支持泛型,形式如:Map<K,V>

 

HashMap类
HashMap是Map的一个重要实现类,也是最常用的,基于哈希表实现
HashMap中的entry对象是无序排列的
key值和value值都是可以为unll的,但是一个HashMap只能有一个
key值为null的映射(key值不可以重复)

 

 

案列功能说明

通过Map<String,Student>进行学生信息管理
其中key值为学生的ID,value为学生的对象

  通过键盘输入学生信息

  对集合中的学生信息进行增,删,改,查操作

 

  1 import java.util.HashMap;
  2 import java.util.Map;
  3 import java.util.Map.Entry;
  4 import java.util.Scanner;
  5 import java.util.Set;
  6 
  7 public class MapTest {
  8 
  9     // 用来承装学生类型对象  // 这里的Student为上次写的Student类 (参考Java之集合框架上(9))
 10     public Map<String, Student> students;
 11     // 在构造器中初始化students属性
 12     public MapTest(){
 13         this.students = new HashMap<String, Student>();
 14     }
 15     
 16     /*
 17      * 测试添加:输入学生ID,判断是否被占用
 18      * 若未被占用,则输入姓名,创建学生对象,并且
 19      * 添加到students中
 20      */
 21     public void testPut(){
 22         // 创建一个Scanner对象,用来获取输入的学生ID和姓名
 23         Scanner console = new Scanner(System.in);
 24         int i = 0;
 25         while (i < 3){
 26             System.out.println("请输入学生ID:");
 27             String ID = console.next();
 28             // 判断ID是否被占用
 29             Student st = students.get(ID);
 30             if (st == null){
 31                 // 提示输入学生姓名
 32                 System.out.println("请输入学生姓名:");
 33                 String name = console.next();
 34                 // 创建新的学生对象
 35                 Student newStudent = new Student(ID,name);
 36                 // 通过调用students的put方法,添加ID-学生映射
 37                 students.put(ID, newStudent);
 38                 System.out.println("成功添加学生:" + students.get(ID).name);
 39                 i ++;
 40             }
 41             else{
 42                 System.out.println("该学生ID已被占用!");
 43                 continue;
 44             }
 45         }
 46     }
 47     
 48     // 测试Map的KeySet方法
 49     public void testKeySet(){
 50         // 通过KeySet方法,返回Map中的所有“键”的Set集合
 51         Set<String> KeySet = students.keySet();
 52         // 取得students的容量
 53         System.out.println("总共有:" + students.size() + "个学生!");
 54         // 遍历KeySet,取得每一个键,在调用get方法取得每一个键对应的value值
 55         for (String stuId: KeySet){
 56             Student st = students.get(stuId) ;
 57             if (st != null){
 58                 System.out.println("学生:" + st.name);
 59             }
 60         }
 61     }
 62     
 63     // 测试删除Map中已有的映射
 64     public void testRemove(){
 65         // 获取从键盘输入的待删除学生ID字符串
 66         Scanner console = new Scanner(System.in);
 67         while(true){
 68             // 提示输入待删除的学生的ID
 69             System.out.println("请输入要删除的学生ID!");
 70             String ID = console.next();
 71             // 判断ID是否有对应的学生对象
 72             Student st = students.get(ID);
 73             if (st == null){
 74                 // 提示输入的ID并不存在
 75                 System.out.println("该ID不存在!");
 76                 continue;
 77             }
 78             students.remove(ID);
 79             System.out.println("成功删除学生:" + st.name);
 80             break;
 81         }
 82     }
 83     
 84     // 通过entrySet方法来遍历Map
 85     public void testEntrySet(){
 86         // 通过entrySet方法,返回Map中的所有键值对
 87         Set<Entry <String,Student>> entrySet = students.entrySet();
 88         for (Entry<String, Student> entry:entrySet){
 89             System.out.println("取得键:" + entry.getKey());
 90             System.out.println("对应的值:" + entry.getValue().name);
 91             
 92         }
 93     }
 94     
 95     // 利用put方法修改Map中已有映射
 96     public void testModify(){
 97         // 提示输入要修改的学生ID
 98         System.out.println("请输入要修改的学生ID:");
 99         // 创建一个Scanner对象,去获取从键盘上输入的学生ID字符串
100         Scanner console = new Scanner(System.in);
101         while (true ){
102             // 取得从键盘输入的学生ID
103             String stuID = console.next();
104             // 从students中查找该学生ID对应学生对象
105             Student student = students.get(stuID);
106             if (student == null){
107                 System.out.println("该ID不存在!请从新输入!");
108                 continue;
109             }
110             // 提示当前对应学生对象的姓名
111             System.out.println("当前学生ID,所对应的学生为:" + student.name);
112             // 提示输入新的学生姓名,来修改已有映射
113             System.out.println("请输入新的学生姓名:");
114             String name = console.next();
115             Student newStudent = new Student(stuID,name);
116             students.put(stuID, newStudent);
117             System.out.println("修改成功!");
118             break;
119         }
120     }
121     
122     public static void main(String[] args) {
123 
124         MapTest mt = new MapTest();
125         mt.testPut();
126         mt.testKeySet();
127         mt.testRemove();
128         mt.testEntrySet();
129         mt.testModify();
130         mt.testEntrySet();
131     }
132 
133 }

 

以上是关于Java 之集合框架 中(10)的主要内容,如果未能解决你的问题,请参考以下文章

Java源代码之集合框架(图)

java集合框架之ArrayList

java 集合框架之 Map

java 集合框架之 Set

第三节2:Java集合框架之队列Queue

Java面试准备之探究集合(未完)