1. 自定义类 Person
public class Person {
private String name;
private int age;
private String sex;
public Person(String name, int age, String sex) {
this.name = name;
this.age = age;
this.sex = sex;
}
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;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + age;
result = prime * result + ((name == null) ? 0 : name.hashCode());
result = prime * result + ((sex == null) ? 0 : sex.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;
if (sex == null) {
if (other.sex != null)
return false;
} else if (!sex.equals(other.sex))
return false;
return true;
}
@Override
public String toString() {
return "Person [name=" + name + ", age=" + age + ", sex=" + sex + "]";
}
}
2. demo类
/**
* 将对象做为HashMap的key,所以对象要重写hashcode方法和equals方法
* @author bruce
*
*/
public class HashMapDemo {
public static void main(String[] args) {
Map<String, String> map = new HashMap<String, String>();
map.put("1", "2");
map.put("2", "3");
map.put("3", "4");
map.put("4", "5");
map.put("5", "6");
map.put("6", "7");
map.put("7", "8");
map.put("8", "9");
// addMap(map);
// deleteMap(map);
// editMap(map);
findMap(map);
}
/**
* 如果没有重写hashcode和equals方法此处输出两个xiaosan
*/
@Test
public void objectHashMapKey(){
Map<Person, String> map = new HashMap<Person, String>();
map.put(new Person("xiaosan", 23, "女"), "上海");
map.put(new Person("liuhai", 26, "男"), "北京");
map.put(new Person("xiaosan", 23, "女"), "上海");
map.put(new Person("xiaolan", 23, "女"), "深圳");
Iterator<Person> iterator = map.keySet().iterator();
while(iterator.hasNext()){
Person person = iterator.next();
System.out.println(map.get(person));
}
}
private static void findMap(Map<String, String> map) {
String value = "3";
Set<String> set = map.keySet();
Iterator<String> iterator = set.iterator();
while(iterator.hasNext()){
String key = iterator.next();
if(map.get(key).equals(value)){
System.out.println("找到了,对应的 key = " + key);
break;
}
}
}
private static void editMap(Map<String, String> map) {
System.out.println("原map大小 = " + map.size());
Set<String> set = map.keySet();
Iterator<String> iterator = set.iterator();
while(iterator.hasNext()){
String key = iterator.next();
if(map.get(key).equals("3")){
System.out.println("在这里修改,修改前 key = " + key + " value = " + map.get(key));
map.put(key, "小三");
}
}
printMap(map);
}
private static void deleteMap(Map<String, String> map) {
System.out.println("原map大小 = " + map.size());
Set<String> set = map.keySet();
Iterator<String> iterator = set.iterator();
while(iterator.hasNext()){
String key = iterator.next();
if(map.get(key).equals("3")){
iterator.remove();
}
}
printMap(map);
}
private static void addMap(Map<String, String> map) {
System.out.println("原map大小 = " + map.size());
map.put("000", "000");
printMap(map);
}
public static void printMap(Map<String, String> map){
int i = 0;
for(String string : map.keySet()){
i++;
System.out.println("第" + i+" key = "+string+" value = "+map.get(string));
}
System.out.println("修改后map大小 = " + map.size());
}
}