使用HashMap集合,存储自定义的对象。 如果自定义的对象作为键(键不能重复),需要重写自定义类型的hashCode()和equals()方法。
8种基本数据类型对应的引用类型(包装类),以及String类型已经自动重写了hashCode()和equals()方法。
Demo.java:
package cn.xxx.demo;
import java.util.HashMap;
import java.util.Map;
// 使用HashMap集合,存储自定义的对象。 如果自定义的对象作为键(键不能重复),需要重写自定义类型的hashCode()和equals()方法。
public class Demo {
public static void main(String[] args) {
function();
}
public static void function(){
HashMap<Person, String> map = new HashMap<Person, String>();
map.put(new Person("a",20), "里约热内卢");
map.put(new Person("b",18), "索马里");
map.put(new Person("b",18), "索马里");
map.put(new Person("c",19), "百慕大");
for(Person key : map.keySet()){ // 通过keySet()遍历
String value = map.get(key);
System.out.println(key+"..."+value);
}
System.out.println("===================");
for(Map.Entry<Person, String> entry : map.entrySet()){ // 通过entrySet()遍历
System.out.println(entry.getKey()+"..."+entry.getValue());
}
}
}
Person.java(Penson作为键,要重写hashCode()和equals()方法):
package cn.xxx.demo;
public class Person {
private String name;
private int age;
@Override
public int hashCode() { // 重写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) { // 重写equals()方法
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
Person other = (Person) 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;
}
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;
}
public Person(String name, int age) {
super();
this.name = name;
this.age = age;
}
public Person() {
super();
}
@Override
public String toString() {
return "Person " + name +"...."+ age ;
}
}