• Map和HashMap

  Map接口

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

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

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

  4.每个键最多只能映射到一个值

  5.Map接口提供了分别返回key值集合,value值集合以及Entry(键值对)集合的方法

  6.Map支持泛型,形式如:Map<K,V>

  HashMap类

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

  2.HashMap中的Entry对象是无序排列的

  3.key值和value值都可以为null,但是一个HashMap只能有一个key值为null的映射(key值不可重复)

  

  • 学生选课——使用Map添加学生
  • 学生选课——删除Map中的学生
  • 学生选课——修改Map中的学生

package com.imooc.collection;

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

public class MapTest {
    //用来承装学生类型对象
    public Map<String,Student>students;
    /*在构造器中初始化students属性*/
    public MapTest(){
        this.students=new HashMap<String,Student>();
    }
    /**
     * 测试添加:输入学生ID,判断是否被占用
     * 若薇被占用,则输入姓名,创建新学生对象,并且
     * 添加到student中
     */
    public void testPut(){
        Scanner console=new Scanner(System.in);
        int i=0;
        while (i<3) {
            System.out.println("请输入学生ID");
            String ID=console.next();
            Student st=students.get(ID);
            if (st==null) {
                //提示输入学生姓名
                System.out.println("请输入学生姓名");
                String name=console.next();
                //添加新的学生对象
                Student newStudent=new Student(ID,name);
                students.put(ID,newStudent);
                System.out.println("成功添加学生:"+students.get(ID).name);
                i++;
            }else{
                System.out.println("该学生ID已被占用");
                continue;
            }
        }
    }
    /**
     * @param args测试Map的keySet方法
     */

    public void testKeySet(){
        //keySet方法,返回Map中的所有“键”的Set集合
        Set<String> keySet=students.keySet();
        //取得student的容量
        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);
            } 

        }
    }

    /**
     * 测试删除Map中的映射
     */
    public void testRemove(){

        //获取从键盘输入待删除学生ID字符串
        Scanner console=new Scanner(System.in);
        while (true) {
            //提示输入待删除的学生ID
            System.out.println("请输入要删除的学生ID");
            String ID=console.next();
            //判断该ID是否有对应的学生对象
            Student st=students.get(ID);
            if (st==null) {
                //提示输入的ID并不存在
                System.out.println("该ID不存在");
                continue;
            }
            students.remove(ID);
            System.out.println("成功删除学生"+st.name);
            break;
        }
    }
    /**
     * 通过entrySet方法来遍历Map
     */
    public void testEntrySet(){
        //通过entrySet方法,返回Map中的所有键值对
        Set<Entry<String,Student>> entrySet=students.entrySet();
        for (Entry<String, Student> entry : entrySet) {
            System.out.println("取得键"+entry.getKey());
            System.out.println("对应的职为:"+entry.getValue().name);
        }
    }

    /**
     * 利用put方法修改Map中的已有映射
     */
    public void testModify(){
        //提示输入要修改的学生ID
        System.out.println("请输入要修改的学生ID:");
        //创建Scanner对象,去获取从键盘上输入的学生ID字符串
        Scanner console=new Scanner(System.in);
        while(true){
            //取得从键盘上输入的学生ID
            String stuID=console.next();
            //从students中查找该学生ID对应的学生对象
            Student student=students.get(stuID);
            if (student==null) {
                System.out.println("该ID不存在,重新输入!");
                continue;
            }
            //提示当前对应的学生对象的姓名
            System.out.println("当前该学生ID,所对应的学生为:"+student.name);
            //提示输入新的学生姓名,来修改已有的映射
            System.out.println("请输入新的学生姓名");
            String name=console.next();
            Student newStudent=new Student(stuID,name);
            students.put(stuID,newStudent);
            System.out.println("修改成功!");
            break;
        }
    }

    /**
     * @param args
     */
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        MapTest mt=new MapTest();
        mt.testPut();
        mt.testKeySet();
        /*mt.testRemove();
        mt.testEntrySet();*/
        mt.testModify();
        mt.testEntrySet();
    }

}

Java中的集合框架(中)的更多相关文章

  1. 菜鸟日记之 java中的集合框架

    java中的集合框架图 如图所示:java中的集合分为两种Collection和Map两种接口 可分为Collection是单列集合和Map的双列集合 Collection单列集合:继承了Iterat ...

  2. Java中的集合框架(下)

    学生选课--判断Set中课程是否存在 package com.imooc.collection; import java.util.ArrayList; import java.util.Arrays ...

  3. Java中的集合框架(上)

    Java中的集合框架概述 集合的概念: Java中的集合类:是一种工具类,就像是容器,存储任意数量的具有共同属性的对象. 集合的作用: 1.在类的内部,对数据进行组织: 2.简单的快速的搜索大数据量的 ...

  4. 第49节:Java集合框架中底层文档的List与Set

    Java集合框架中的List与Set // 简书作者:达叔小生 Collection -> Set 无序不重复 -> 无序HashSet,需要排序TreeSet -> List 有序 ...

  5. Java集合框架中的快速失败(fail—fast)机制

      fail-fast机制,即快速失败机制,是java集合框架中的一种错误检测机制.多线程下用迭代器遍历一个集合对象时,如果遍历过程中对集合对象的内容进行了修改(增加.删除),则会抛出Concurre ...

  6. Java中的集合框架-Collections和Arrays

    上一篇<Java中的集合框架-Map>把集合框架中的键值对容器Map中常用的知识记录了一下,本节记录一下集合框架的两个工具类Collections和Arrays 一,Collections ...

  7. Java中的集合框架-Map

    前两篇<Java中的集合框架-Commection(一)>和<Java中的集合框架-Commection(二)>把集合框架中的Collection开发常用知识点作了一下记录,从 ...

  8. Java中的集合框架-Collection(二)

    上一篇<Java中的集合框架-Collection(一)>把Java集合框架中的Collection与List及其常用实现类的功能大致记录了一下,本篇接着记录Collection的另一个子 ...

  9. Java:类集框架中集合的学习

    Java:类集框架中集合的学习 集合 Java:Set的学习 Set是类集框架中的集合类.集合是不按特定的方式排序,并且没有重复对象的一种类. Q:Set如何操作?Set中的不按特定方式排序是怎么排序 ...

  10. 牛客网Java刷题知识点之Java 集合框架的构成、集合框架中的迭代器Iterator、集合框架中的集合接口Collection(List和Set)、集合框架中的Map集合

    不多说,直接上干货! 集合框架中包含了大量集合接口.这些接口的实现类和操作它们的算法. 集合容器因为内部的数据结构不同,有多种具体容器. 不断的向上抽取,就形成了集合框架. Map是一次添加一对元素. ...

随机推荐

  1. mysql中对字符集和校对规则的认识

    字符集:指符号和字符编码的集合.校对规则:比较字符编码的方式.GBK2312:主要包括简体中文字符及常用符号,对于中文字符采用双字节编码的格式,也就是说一个汉字字符在存储占两个字节.GBK:包括有中. ...

  2. BeautifulSoup 抓取网站url

    1 # -*- coding:utf-8 -*- 2 import urlparse 3 import urllib2 4 from bs4 import BeautifulSoup 5 6 url ...

  3. IDEA热部署(三)---jetty插件调试(转)

    我们在开发的时候习惯对于项目的框架进行分层,在idea中对于不同的层,我们使用module来进行划分,不同的module之间是通过maven来进行依赖的. 我们的项目结构是这样的,admin是我们的w ...

  4. 「mysql优化专题」主从复制面试宝典!面试官都没你懂得多!(11)

    内容较多,可先收藏,目录如下: 一.什么是主从复制 二.主从复制的作用(重点) 三.主从复制的原理(重中之重) 四.三步轻松构建主从 五.必问面试题干货分析(最最重要的点) 一.什么是主从复制(技术文 ...

  5. iOS开发解决json串中的NSNull类型

    后端返回的数据中总会出现一些NSNull类型,当我们一处理程序就会崩溃,因此想到把返回的数据中的NSNull类型全部转换成@""空字符串.下面是转化方法: 1 自定义的几个方法:放 ...

  6. 【CSS3】内联、内部、外部样式,样式优先级、层叠、继承

    <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...

  7. Layui常见问题

    为什么表单不显示?当你使用表单时,Layui会对select.checkbox.radio等原始元素隐藏,从而进行美化修饰处理.但这需要依赖于form组件,所以你必须加载 form,并且执行一个实例. ...

  8. C# TreeView 控件的综合使用方法

    1.概述 该篇文章开发使用的语言c#,环境visualstudio2010,sql数据库.主要内容包括: (1)treeView控件添加根节点.子节点的基本方法,节点的删除. (2)把treeView ...

  9. HTML列表的常用属性及其应用

    首先列表分成有序和无序分别是<ol><ul>,无序的比较简单,看个例子: <html> <body> <h4>一个无序列表:</h4& ...

  10. 7 Series GTP IP核使用总结 IP核配置篇

    FPGA内嵌收发器相当于以太网中的PHY芯片,但更灵活更高效,线速率也在随着FPGA芯片的发展升级.本文对7系列FPGA内部高速收发器GTP IP核的配置和使用做些简单的总结,以备后续回顾重用.本文是 ...