DESKTOP-IL3AS1R_20200909-陈鑫
问题:
HashMap存储自定义类型键值
public class Trees {
private String name;
private int age;
public Trees() {
}
public Trees(String name, int age) {
super();
this.name = name;
this.age = age;
}
@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( obj instanceof Trees ) {
Trees p = (Trees)obj;
System.out.println( "equals" );
return name.equals( p.name ) && age == p.age ;
}
return false;
}
@Override
public String toString() {
return "[" + name + ":" + age + "]";
}
}
测试类( TreesTest )
public class TreesTest {
public static void main(String[] args) {
Map<Trees,Integer> map = new HashMap<>();
map.put(new Trees( "杨树", 28 ) , 100 );
map.put(new Trees( "柳树", 50 ) , 50 );
map.put(new Trees( "银杏树", 40 ) , 41 );
map.put(new Trees( "梧桐树", 28 ) , 601 );
map.put(new Trees( "松树", 15 ) , 116 );
System.out.println(map);
//获取Map集合中,所有的键值对(Entry)对象,以Set集合形式返回
Set<Trees> keys = map.keySet();
for(Trees name : keys) {
System.out.println("(" + name +"," + map.get(name)+")");
}
}
}
当给HashMap中存放自定义对象时,如果自定义对象作为key存在,这时要保证对象唯一,必须重写对象的hashCode和equals方法
吐槽:
为祖国教育事业及国家铁路献上绵薄之力。
点赞