Map练习(基本自定义类型练习)

本文通过一个具体的例子展示了如何使用 Java 中的 HashMap 来存储学生对象及其对应的城市归属地,并提供了两种遍历 HashMap 的方法。

package map;

import java.util.*;

public class MapDemo3 {

 /**
  * @Map练习
  * 每一个学生都有对应的归属地。
  * 学生Student,地址String。
  * 学生属性:姓名,年龄
  * 注意,姓名和年龄相同视为同一个学生
  * 保证学生的唯一性。
  *
  *
  * 1.描述学生。
  *
  * 2.定义map容器,将学生视作键,地址为值,存入。
  *
  * 3.获取map集合中的元素。
  */
 public static void main(String[] args) {
  HashMap<Student,String> hm = new HashMap<Student,String>();
  
  hm.put(new Student("lisi1",21),"beijing");
  hm.put(new Student("lisi1",21),"tianjing");
  hm.put(new Student("lisi2",22),"shanghai");
  hm.put(new Student("lisi3",23),"nanjng");
  hm.put(new Student("lisi4",24),"wuhan");
  
  //第一种取出的方式  keySet
  
  Set<Student> keySet = hm.keySet();
  
  Iterator<Student> it = keySet.iterator();
  
  while(it.hasNext()){
   Student stu = it.next();
   String addr = hm.get(stu);
   System.out.println(stu+"...."+addr);
  }
  
  //第二种取出方式 entrySet
  
  Set<Map.Entry<Student, String>> entrySet = hm.entrySet();
  
  Iterator<Map.Entry<Student, String>> iter = entrySet.iterator();
  
  while(iter.hasNext()){
   Map.Entry<Student, String> me = iter.next();
   Student stu = me.getKey();
   String addr = me.getValue();
   System.out.println(stu+"................"+addr);
  }
  
 }

}

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 s){
  int num = new Integer(this.age).compareTo(new Integer(s.age));
  if(num==0)
   return this.name.compareTo(s.name);
  return num;
 }
 
 public int hashCode(){
  return name.hashCode()+age*34;
 }
 public boolean eauqls(Object obj){
  if(!(obj instanceof Student))//如果传进来的不是Student 类型,返回异常
   throw new ClassCastException("类型不匹配!!!"); 
  
  Student s = (Student) obj;
  System.out.println(this.name+"比较"+s.name);
  return this.name.equals(s.name) && this.age == s.age;
 }

 public String toString(){
  return name+"::"+age;
 }
 public String getName() {
  return name;
 }
 public void setName(String name) {
  this.name = name;
 }
 public int getAge() {
  return age;
 }
 public void setAge(int age) {
  this.age = age;
 }

 

 
 
}

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值