HashMap存储自定义数据结构方法
在使用HashMap存储自定义数据时,需要注意的就是如果作为key的元素没有Hashcode,equal方法时,那么将无法保证key是唯一不重复的。
未重写两个函数
import java.util.HashMap;
import java.util.Map;
import java.util.Set;
public class nbmap {
/*map存储自定义数据类型
* 保证key是唯一的!
* 作为key的元素,必须重写hashcode和equal方法*/
public static void main(String[] args) {
show1();
}
private static void show1() {
/*使用person作为key,必须重写hashcode和equal方法*/
HashMap<Person,String> k1=new HashMap<>();
k1.put(new Person("a",18),"nb");
k1.put(new Person("b",20),"sb");
k1.put(new Person("c",19),"wdnmd");
k1.put(new Person("a",18),"nb");
Set<Map.Entry<Person,String>> set=k1.entrySet();
for(Map.Entry<Person,String> i :set){
System.out.println(i.getKey()+"="+i.getValue());
}
}
}
此时person类并没有去重写那两个函数
运行结果:(出现了key重复的情况)

重写两个函数
利用idea的补充代码快捷键(无脑next)

运行结果:(无重复key元素)

Person类代码(全靠idea的代码补充。)
import java.util.Objects;
public class Person {
private String name;
private int age;
public Person() {
}
public Person(String name, int age) {
this.name = name;
this.age = age;
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
Person person = (Person) o;
return age == person.age &&
Objects.equals(name, person.name);
}
@Override
public int hashCode() {
return Objects.hash(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;
}
@Override
public String toString() {
return "Person{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}
}

浙公网安备 33010602011771号