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 }
时间: 2024-08-18 09:14:51

Java 之集合框架 中(10)的相关文章

Java集合框架中隐藏的设计套路

我们的世界不应该只有"胡萝卜" 进入正题之前容我先扯点别的. 最近突然想到了一个驴子和胡萝卜不得不说的故事.说是一个人坐在驴子背上,用一根长杆绑着一根胡萝卜,然后把胡萝卜悬到驴子的面前,驴子以为只要向前走一步就可以吃到胡萝卜,于是不停地向前走,可是它始终无法吃到这根萝卜. 一千个读者就有一千个哈姆雷特,当然不同的人对这个故事也会有不同的理解.比如我们为了生活拼命地工作,却永远达不到财务自由,我们是不是也像一只忙碌的"驴子"呢? 所以,我们的世界不应该只有"

黑马程序员——java基础---集合框架

------Java培训.Android培训.iOS培训..Net培训.期待与您交流! ------- 一.集合框架 概念:集合框架是Java中为了方便对集合进行存储.操作而形成的体系.集合是针对对象最常见的一种存储形式. 数组和集合类同是容器,区别在哪里?     相同点:               集合和数组都是容器,都可一存储对象(对象引用).     不同点:               数组长度固定,集合长度可变.               数组可以存储基本数据类型,集合却只能存储

详解Java的MyBatis框架中SQL语句映射部分的编写

这篇文章主要介绍了Java的MyBatis框架中SQL语句映射部分的编写,文中分为resultMap和增删查改实现两个部分来讲解,需要的朋友可以参考下 1.resultMap SQL 映射XML 文件是所有sql语句放置的地方.需要定义一个workspace,一般定义为对应的接口类的路径.写好SQL语句映射文件后,需要在MyBAtis配置文件mappers标签中引用,例如: ? 1 2 3 4 5 6 <mappers>   <mapper resource="com/limi

java的集合框架之一

java是一套很成熟的东西,很多商用的东西都喜欢用它,用的人多,稳定.不过一般也不怎么说起它,因为太常见了,私下里说,写java应用层得就像农民工,每一处都是搭积木,根据设计师的东西如何优雅地搭好积木,当然美其名曰,论农民工搭积木的艺术修养.不难,但是东西很多,经验在里面是一个相当重要的东西.以上纯属每天扯淡,笑看即可,毕竟我目前就是个渣java程序员. java的集合框架以collection接口当作基础,这个接口定义了基本框架,包括size.hashcode.iterator.add.add

java.util 集合框架集合

java的集合框架为程序提供了一种处理对象组的标准方式.设计了一系列标准泛型接口: ⑴Collection ()接口,扩展了Iterable接口,位于集合层次结构的顶部,因此所有的集合都实现Collection接口,并提供了iterator()方法来返回一个迭代器.用add()方法添加对象,remove方法()删除元素,clear()删除集合所有元素(size=0),contains()方法查看集合是否包含对象,toArray()方法返回集合元素数组,equals()方法比较两个集合是否相等,s

Java基础-集合框架

首先,集合与数组的区别?          1. 长度:     数组固定:集合可变.          2. 存储类型:     数组存储基本数据类型和对象:集合只能存储基本数据类型.                                        数组存储的元素必须是一个数据类型:集合存储对象可以是不同类型.                                       集合类(为什么出现集合类??)     面向对象语言对事物的体现都是以对象的形式,所以为了方便

黑马程序员---java基础---集合框架工具类:Collections和Arrays

------<a href="http://www.itheima.com" target="blank">Java培训.Android培训.iOS培训..Net培训</a>.期待与您交流! ------        Collections 一.概述 Collections是对集合框架的一个工具类.它里边的方法都是静态的,不需要创建对象.并未封装特有数据. 在Collections工具类中大部分方法是用于对List集合进行操作的,如比较,二

java的集合框架最全详解

java的集合框架最全详解(图) 前言:数据结构对程序设计有着深远的影响,在面向过程的C语言中,数据库结构用struct来描述,而在面向对象的编程中,数据结构是用类来描述的,并且包含有对该数据结构操作的方法. 在Java语言中,Java语言的设计者对常用的数据结构和算法做了一些规范(接口)和实现(具体实现接口的类).所有抽象出来的数据结构和操作(算法)统称为Java集合框架(JavaCollectionFramework). Java程序员在具体应用时,不必考虑数据结构和算法实现细节,只需要用这

Java的集合框架最全详解(图)

纯个人整理,如有错误请指正. java的集合框架最全详解(图) 前言:数据结构对程序设计有着深远的影响,在面向过程的C语言中,数据库结构用struct来描述,而在面向对象的编程中,数据结构是用类来描述的,并且包含有对该数据结构操作的方法. 在Java语言中,Java语言的设计者对常用的数据结构和算法做了一些规范(接口)和实现(具体实现接口的类).所有抽象出来的数据结构和操作(算法)统称为Java集合框架(JavaCollectionFramework). Java程序员在具体应用时,不必考虑数据