您的位置:首页 > 产品设计 > UI/UE

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

2016-03-03 21:29 459 查看
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

·····················································
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: