[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 map = new HashMap<>();
        map.put(s1,"湘潭");
        map.put(s2,"长沙");
        Set Hset = map.keySet();
        Iterator 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);
        }



    }

}

你可能感兴趣的:(java,开发语言)