当前位置: 首页 > article >正文

[Java][练习][HashMap]学生户籍管理练习-增强For与Iterator

要求:

设计学生类:具有姓名和年龄

设计键值对:键为学生类对象,值是字符串对象且为户籍

案例:张三 18岁 长沙

练习查漏补缺:

1.在使用Iterator迭代时,while循环里面的it.next();不可多次重复使用,每增加一行it.next();都会导致在本循环中让第三方变量的遍历推进一次,导致结果异常

解决方案:仅仅使用一个it.next();将获取的键用Student stu来储存 然后用stu来代替这个键进行操作,比如map.get()获取值,比如stu.getAge();获得年龄,避免it.next();的多次复用。

拓展思考:这种创建新变量接收第三方变量的思维在加强for中依然有效,是一种重要的编程思想,需要记忆并且应用在今后的工作中

2.当使用一个Map数据结构时,要注意。输入的时候是使用map.put();获取值的时候是使用map.get();其中键是独一无二的,但是值是多样的

鉴于Map没有顺序,不可重复,无法排序。我们将其的键抽象到set中,借助set的不可重复,没有索引,可以排序的优点进行键的排列。从而获取值的结果

import java.util.*;
import java.util.function.Consumer;

public class Main{
    public static void main(String[] args){
        //对于一个map集合来说:
        /*
        1.无序 2.不重复 3.无索引
        HashMap和HashSet的底层逻辑都是HashTable
        计算键的哈希值 然后在数组中去找到这个索引
        如果键是重复的,那么就覆盖 如果键不是重复的 那么就会添加新的entry对象
        但是在JDK8以前会让原数据下来 然后挂载新元素上
        JDK8以后 会直接在旧数据基础上构成一个树结构
        总结而言:
        1.HashMap底层是哈希表结构的
        2.依赖于Hashcode以及equals方法来保证键的唯一
        3.如果键存储的是自定义对象 需要重写hashcode和equals方法
        4.如果键存的是自定义对象 不需要重写hashcode和equals方法
         */
        Student s1 = new Student("xyc",18);
        Student s2 = new Student("www",19);
        HashMap<Student,String> map = new HashMap<>();
        map.put(s1,"湘潭");
        map.put(s2,"长沙");
        Set<Student> Hset = map.keySet();
        Iterator<Student> it =Hset.iterator();
        while(it.hasNext()){
            Student stu = it.next();
            String city = map.get(stu);
            String name = stu.getName();
            int age = stu.getAge();
            System.out.println(city+name+age);//it.next();调用存在一个问题 每次调用其实就是往后推了一次
        }
        System.out.println("——————————————————————————————");
        for (Student student : Hset) {
            Student stu = student;
            String city = map.get(stu);
            int age = stu.getAge();
            String name=stu.getName();
            System.out.println(city+age+name);
        }



    }

}


http://www.kler.cn/a/161243.html

相关文章:

  • 如何在 Ubuntu 16.04 上设置 NFS 挂载
  • SpringBoot整合Freemarker(三)
  • 【单例模式】饿汉式与懒汉式以及线程安全
  • 【Leecode】Leecode刷题之路第46天之全排列
  • 【C++笔记】C++三大特性之继承
  • 蓝桥杯备考——算法
  • 移动云荣获OpenInfra社区“算力基础设施技术突破奖”
  • [Makefile] include 关键字
  • 数据结构之栈
  • jstack java堆栈跟踪工具
  • 排序算法介绍(一)插入排序
  • TCP通讯
  • 《Linux源码趣读》| 好书推荐
  • 华清作业day41
  • springboot084基于springboot的论坛网站
  • 【Redis】Redis高级特性和应用(慢查询、Pipeline、事务、Lua)
  • git 配置多端多个账号(码云、github、gitlab)
  • 毕设:《基于hive的音乐数据分析系统的设计与实现》
  • Ardupilot开源飞控之Invensense IMUs
  • 使用bard分析视频内容
  • 加载离线镜像包:在线镜像离线为tar包、tar离线镜像包加载并根据imageId打tag
  • INFINI Easysearch 与华为鲲鹏完成产品兼容互认证
  • 【文件上传系列】No.0 利用 FormData 实现文件上传、监控网路速度和上传进度(原生前端,Koa 后端)
  • 获取MATLAB默认配色方案
  • Git初学入门指令
  • Android平板还能编程?Ubuntu本地安装code-server远程编程写代码