package com.itheima.demo02.Map;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;
/*
HashMap 存储自定义类型键值
Map 集合保证 key 是唯一的:
作为 key 的元素, 必须重写 hashCode 方法和 equals 方法, 以保证 key 唯一
*/
public class Demo01HashMapSavePerson {
public static void main(String[] args) {show02();
}
/*
HashMap 存储自定义类型键值
key:Person 类型
Person 类就必须重写 hashCode 方法和 equals 方法, 以保证 key 唯一
value:String 类型
可以重复
*/
private static void show02() {
// 创建 HashMap 集合
HashMap<Person,String> map = new HashMap<>();
// 往集合中添加元素
map.put(new Person("女王",18),"英国");
map.put(new Person("秦始皇",18),"秦国");
map.put(new Person("普京",30),"俄罗斯");
map.put(new Person("女王",18),"毛里求斯");
// 使用 entrySet 和增强 for 遍历 Map 集合
Set<Map.Entry<Person, String>> set = map.entrySet();
for (Map.Entry<Person, String> entry : set) {Person key = entry.getKey();
String value = entry.getValue();
System.out.println(key+"-->"+value);
}
}
/*
HashMap 存储自定义类型键值
key:String 类型
String 类重写 hashCode 方法和 equals 方法, 可以保证 key 唯一
value:Person 类型
value 可以重复 (同名同年龄的人视为同一个)
*/
private static void show01() {
// 创建 HashMap 集合
HashMap<String,Person> map = new HashMap<>();
// 往集合中添加元素
map.put("北京",new Person("张三",18));
map.put("上海",new Person("李四",19));
map.put("广州",new Person("王五",20));
map.put("北京",new Person("赵六",18));
// 使用 keySet 加增强 for 遍历 Map 集合
Set<String> set = map.keySet();
for (String key : set) {Person value = map.get(key);
System.out.println(key+"-->"+value);
}
}
}
package com.itheima.demo02.Map;
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 String toString() {
return "Person{" +
"name='" + name + '\'' +
", 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;}
}