HashMap存储自定义类型的键值
map集合保证key是唯一的:
作为key的元素,必须重写Hashcode方法和Equals方法,以保证key的唯一
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) {//为保证key值唯一必须重写hashcode和equals
if (this == o) return true;
if (!(o instanceof Person)) return false;
Person person = (Person) o;
return age == person.age && Objects.equals(name, person.name);
}
@Override
public int hashCode() {//为保证key值唯一必须重写hashcode和equals
return Objects.hash(name, age);
}
@Override
public String toString() {
return "Person{" +
"name='" + name + '\'' +
", age=" + 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;
}
}
import java.util.HashMap;
import java.util.Map;
import java.util.Set;
public class FuXi2 {
public static void main(String[] args) {
HashMap<String,Person> a = new HashMap<>();
a.put("北京",new Person("sss",18));
a.put("重地",new Person("sss",18));
a.put("通话",new Person("sss2",184));
System.out.println(a);
Set<String> strings = a.keySet();//创建存储K值的set集合
for (String string : strings) {//遍历
Person person = a.get(string);//得到v值
System.out.println(string+person);
}
HashMap<Person,String> a1 = new HashMap<>();//K值作为自定义类型 必须重写自定义类的hashcode和equals方法
a1.put(new Person("ddd",18),"www");
a1.put(new Person("ddd",18),"www1");
a1.put(new Person("ddd2",138),"www2");
Set<Person> people = a1.keySet();//创建存储K值的set集合
for (Person person : people) {//遍历
String s = a1.get(person);//得到v值
System.out.println(person+s);
}
for (Map.Entry<Person, String> personStringEntry : a1.entrySet()) {//遍历键与值的set视图
System.out.println(personStringEntry.getKey()+personStringEntry.getValue());//打印获取到的键与值
}
}
}