question_016-JAVA之Map的HashMap键为自定义对象

来源:互联网 发布:js调用微信扫一扫 编辑:程序博客网 时间:2024/06/06 03:57

question_016-JAVA之Map的


HashMap键为自定义对象


----------------------------------------------------


Map<Student, String>

键为:自定义对象Student 【为保证键唯一,必须重写Student的 hashcode和equals方法】

值为:字符串

----------------------------------------------------

Student的定义如下:


package com.lyMapDemo;
public class Student {
private String name;
private int age;

public Student(String name, int age) {
this.name = name;
this.age = age;
}
public Student() {
}

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;
}


// 为保证自定义对象的唯一性,必须重写HashCode和equals方法
@Override 
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + age;
result = prime * result + ((name == null) ? 0 : name.hashCode());
return result;
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
Student other = (Student) obj;
if (age != other.age)
return false;
if (name == null) {
if (other.name != null)
return false;
} else if (!name.equals(other.name))
return false;
return true;
}
}

·························测试····························

package com.lyMapDemo;

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


public class HashMapDemo2 {
public static void main(String[] args) {


// 创建对象
Map<Student, String> hm = new HashMap<Student, String>();


// 创建学生对象
Student s1 = new Student("貂蝉", 12);
Student s2 = new Student("王昭君", 13);
Student s3 = new Student("西施", 14);
Student s4 = new Student("杨贵妃", 15);
Student s5 = new Student("貂蝉", 12);

// 加入HashMap
hm.put(s1,"11112");
hm.put(s2,"222223");
hm.put(s3,"333334");
hm.put(s4,"444445");
hm.put(s5,"555556");

// 方式1遍历:键集合
Set<Student>  set =  hm.keySet();

for(Student i : set){
// 取值
String s =  hm.get(i);
System.out.println(i.getName() + "---" + i.getAge() +"---"+ s);
}
}
}


······················结果·······················

貂蝉---12---555556
杨贵妃---15---444445
西施---14---333334
王昭君---13---222223



········································································

如果不重写hashcode和equals,则得到如下结果······

杨贵妃---15---444445
西施---14---333334
貂蝉---12---555556
貂蝉---12---11112
王昭君---13---222223


·····················································

0 0
原创粉丝点击