黑马程序员_日记58_HashMap自定义对象存取练习
来源:互联网 发布:网络购物合同纠纷举证 编辑:程序博客网 时间:2024/06/07 05:43
——- android培训、java培训、期待与您交流! ———-
问题描述
每一个学生都有对应的归属地。
学生Student,地址String。
学生属性:姓名,年龄。
注意:姓名和年龄相同的视为同一个学生。
保证学生的唯一性。
思路
1 把学生属性存入学生对象–抽象出学生类
2 创建容器,把学生对象存入容器
3 取出学生和对应地址
在学生类中需要做的事:
1 因为要存入多个学生对象进容器,所以必须让学生具备比较性,或者实现比较器
2 因为要去除重复元素,所以一定要覆盖hashCode和equals方法–哈希表计算哈希地址再比较内容
3 set,get,toString方法必须写
4 对于不是学生对象应该抛出异常
源代码
import java.util.*;//学生类class Student implements Comparable<Student>{ private String name; private int age; //构造函数初始化学生 Student(String name,int age) { this.name = name; this.age = age; } public int compareTo(Student stu) { //按学生的年龄排序,如果年龄相等就按姓名字典序排序 int num = new Integer(this.getAge()).compareTo(new Integer(stu.getAge())); if(num == 0) return this.getName().compareTo(stu.getName()); //否则就按年龄排序 return num; } //计算学生对象的哈希地址 public int hashCode() { return name.hashCode()+age*37; } public boolean equals(Object obj) { //如果不是学生对象,抛出类型转换异常 if(!(obj instanceof Student)) throw new ClassCastException("不能转换成Student类型"); //类型转换 Student stu = (Student)obj; //比较学生对象姓名和年龄,去除重复元素 return this.getName().equals(stu.getName()) && this.getAge()==stu.getAge(); } public void setName(String name) { this.name =name; } public String getName() { return name; } public void setAge(int age) { this.age = age; } public int getAge() { return age; } public String toString() { return name+"....."+age; }}//主类用public修饰public class MapTest{ public static void sop(Object obj) { System.out.println(obj); } public static void main(String[] args) { //1 创建hashMap映射 HashMap<Student,String> hm = new HashMap<Student,String>(); //2 添加学生对象为键和对应的地址为值 hm.put(new Student("Jack",20),"北京"); hm.put(new Student("mike",19),"兰州"); hm.put(new Student("mike",19),"兰州"); hm.put(new Student("Tom",25),"广州"); hm.put(new Student("Alice",17),"上海"); hm.put(new Student("Jimmy",21),"长沙"); //3 取出学生和对应地址 getWay(hm); getWay_2(hm); } //3.1用第一种方式从Map中取出所有键值 public static void getWay(HashMap<Student,String> hm) { sop("用第一种方式从Map中取出所有键值:"); //1 把所有的键存入Set Set<Student> keySet = hm.keySet(); //2 keySet获取迭代器 for(Iterator<Student> it = keySet.iterator(); it.hasNext(); ) { //3 迭代取出键,用get获取对应值 Student stu = it.next(); String addr = hm.get(stu); //4 打印取出的结果 sop(stu.toString()+"......"+addr); } } //3.2 第二种方式从Map中取出所有键值 public static void getWay_2(HashMap<Student,String> hm) { sop("第二种方式从Map中取出所有键值"); //1 把所有的映射关系存入Set<Map.Entry<Student,String>> Set<Map.Entry<Student,String>> entrySet = hm.entrySet(); //2 获取迭代器 for(Iterator<Map.Entry<Student,String>> it = entrySet.iterator(); it.hasNext(); ) { //3 迭代取出映射项 Map.Entry<Student,String> me = it.next(); //4 获取学生 Student stu = me.getKey(); //5 获取地址 String addr = me.getValue(); //6打印获取结果 sop(stu.toString()+"......"+addr); } }}
运行结果
0 0
- 黑马程序员_日记58_HashMap自定义对象存取练习
- 黑马程序员_日记59_TreeMap自定义对象练习
- 黑马程序员_日记42_HashSet自定义对象去重练习
- 黑马程序员_日记22_JavaStringTrim练习
- 黑马程序员_日记46_TreeSet练习
- 黑马程序员_HashMap
- 黑马程序员_日记53_泛型应用在自定义类的对象上
- 黑马程序员_日记23_字符串反转练习
- 黑马程序员_日记24_字符串获取计数练习
- 黑马程序员_日记26_Java字典序排序练习
- 黑马程序员_日记38_LinkedList建立堆栈练习
- 黑马程序员_学习日记58_703JavaScript
- 黑马程序员_练习
- 黑马程序员_java学习日记_面向对象
- 黑马程序员_JAVA学习日记_面向对象2
- 黑马程序员_日记3_Java面向对象
- 黑马程序员-----面向对象_内部类(学习日记)
- 黑马程序员_对象
- linux常用命令整理总结之一
- 创建命名共享内存
- linux常用命令整理总结之二
- linux常用命令整理之三
- Emacs的C语言排版缩进模式选择
- 黑马程序员_日记58_HashMap自定义对象存取练习
- linux常用命令整理之四
- AsyncTask(异步任务)
- 面试求职之准备篇
- linux常用命令整理之五
- Codeforces534C:Polycarpus' Dice
- 斐波那契数列的几种计算机解法
- linux常用命令整理之六
- ERROR 1130 (HY000): Host '192.168.225.128' is not allowed to connect to this MySQL server