HashMap存储自定义类型键值
Map集合保证key是唯一的
作为key的元素,必须重写hashCode方法和equals方法,以保证key唯一
例如:
public class Person {
private String name;
private int age;
public Person() {
super();
// TODO Auto-generated constructor stub
}
public Person(String name, int age) {
super();
this.name = name;
this.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;
}
@Override
public String toString() {
return "Person [name=" + name + ", 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 (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;
}
}
/*
HashMap存储自定义类型键值
key:String类型
Stringent类重写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);
/*
打印结果:
上海-->Person [name=李上海, age=19]
广州-->Person [name=许广州, age=20]
北京-->Person [name=张南京, age=18]
*/
}
}
/*
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("秦始皇", 19), "秦国");
map.put(new Person("普京", 20), "俄罗斯");
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);
}
}