疯狂java


您现在的位置: 疯狂软件 >> 新闻资讯 >> 正文

Java—集合框架Map


 

   

  Map接口

  Map提供了一种映射关系,其中的元素是以键值对(key-value)的形式存储的,key和value可以是任意类型的对象,能够实现根据key快速查找value。

  Map中的键值对以Entry类型的对象实例形式存在。

  键(key值)不可重复,value值可以。

  每个键最多只能映射到一个值,一个值可以对应多个键。

  Map接口提供了分别返回key值集合、value值集合以及Entry(键值对)集合的方法。Entry类是Map的一个内部类。

  Map支持泛型,形式如:Map

  HashMap类

  HashMap是Map的一个重要实现类,也是最常用的,基于哈希表实现。

  HashMap中的Entry对象是无序排列的。

  Key值和value值都可以为null,但是一个HashMap只能有一个key值为null的映射

  MapTest.java

  复制代码

  package com.test.collection;

  import java.util.HashMap;

  import java.util.HashSet;

  import java.util.Map;

  import java.util.Map.Entry;

  import java.util.Scanner;

  import java.util.Set;

  public class MapTest {

  public Map

  public MapTest() {

  this.students = new HashMap

  }

  /**

  * 添加

  */

  public void testPut(){

  Scanner console = new Scanner(System.in);

  for (int i = 0; i < 3; i++) {

  System.out.println("输入学生ID:");

  String studentId = console.next();

  //判断该ID是否被占用

  Student st = students.get(studentId);

  if (st == null) {

  //提示输入学生姓名

  System.out.println("输入学生姓名:");

  String studentName = console.next();

  //创建学生对象

  Student newStudent = new Student(studentId, studentName);

  //通过调用students的put方法,添加ID-学生映射

  students.put(studentId, newStudent);

  System.out.println("成功添加学生:" + students.get(studentId).name);

  } else {

  System.out.println("该学生ID被占用");

  continue;

  }

  }

  }

  /**

  * 通过keySet方法遍历Map

  */

  public void testKeySet() {

  //通过keySet方法,返回Map中所有“键”的Set集合

  Set keySet = students.keySet();

  //获得students的容量

  System.out.println("总共有" + students.size() + "个学生");

  //遍历keySet,取得每一个键,再调用get方法取得每一个键对应的value

  for (String stuId : keySet) {

  Student st = students.get(stuId);

  if (st != null) {

  System.out.println("学生:" + st.name);

  }

  }

  }

  /**

  * 删除

  */

  public void testRemove() {

  Scanner console = new Scanner(System.in);

  while (true) {

  System.out.println("请输入要删除学生的ID:");

  String studentId = console.next();

  Student st = students.get(studentId);

  if (st == null) {

  System.out.println("该学生ID不存在");

  continue;

  }

  students.remove(studentId);

  System.out.println("成功删除学生:" + st.name);

  break;

  }

  }

  /**

  * 通过entrySet方法遍历Map

  */

  public void testEntrySet() {

  Set

  System.out.println("总共有" + students.size() + "个学生");

  for (Entry

  System.out.println("key值为:" + entry.getKey());

  System.out.println("对应的value为:" + entry.getValue().name);

  }

  }

  /**

  * 修改

  */

  public void testModify() {

  System.out.println("请输入要修改的学生ID");

  Scanner console = new Scanner(System.in);

  while (true) {

  String studentId = console.next();

  Student st = students.get(studentId);

  if (st == null) {

  System.out.println("该学生ID不存在");

  continue;

  }

  System.out.println("当前学生ID,所对应的学生为" + st.name);

  System.out.println("请输入新的学生的姓名:");

  String studentName = console.next();

  students.put(studentId, new Student(studentId, studentName));

  System.out.println("修改成功");

  break;

  }

  }

  public static void main(String[] args) {

  MapTest mt = new MapTest();

  mt.testPut();

  mt.testKeySet();

  mt.testRemove();

  mt.testEntrySet();

  mt.testModify();

  mt.testEntrySet();

  }

  }

  复制代码

  执行结果:

  复制代码

  输入学生ID:

  1

  输入学生姓名:

  Tom

  成功添加学生:Tom

  输入学生ID:

  2

  输入学生姓名:

  Jack

  成功添加学生:Jack

  输入学生ID:

  3

  输入学生姓名:

  Lucy

  成功添加学生:Lucy

  总共有3个学生

  学生:Tom

  学生:Jack

  学生:Lucy

  请输入要删除学生的ID:

  12

  该学生ID不存在

  请输入要删除学生的ID:

  3

  成功删除学生:Lucy

  总共有2个学生

  key值为:1

  对应的value为:Tom

  key值为:2

  对应的value为:Jack

  请输入要修改的学生ID

  2

  当前学生ID,所对应的学生为Jack

  请输入新的学生的姓名:

  Lisa

  修改成功

  总共有2个学生

  key值为:1

  对应的value为:Tom

  key值为:2

  对应的value为:Lisa

  复制代码

  分类: Java