Map使用非系统类作为key,要覆写equals和hashCode方法
2014-08-28 14:44
399 查看
Map使用非系统类作为key,要覆写equals和hashCode方法例如:
E:\JAVA\NotePadJava\java类集\Map>java HashMapDemo02
姓名:武开英年龄:22
但是如果把key值类型写成Person类型就会出现这样的情况:
import java.util.HashMap; import java.util.Map; import java.util.HashSet; import java.util.Set; import java.util.Iterator; class Person{ private String name; private int age; public Person(String name,int age){ this.name=name; this.age=age; } public String toString(){ return "姓名:"+this.name+"年龄:"+this.age; } } public class HashMapDemo02{ public static void main(String[] args){ Map<String,Person> map= new HashMap<String,Person>(); map.put("a",new Person("武开英",22)); map.put("b",new Person("武开英2",22)); map.put("c",new Person("武开英3",22)); System.out.println(map.get("a")); } }结果:
E:\JAVA\NotePadJava\java类集\Map>java HashMapDemo02
姓名:武开英年龄:22
但是如果把key值类型写成Person类型就会出现这样的情况:
import java.util.HashMap; import java.util.Map; import java.util.HashSet; import java.util.Set; import java.util.Iterator; class Person{ private String name; private int age; public Person(String name,int age){ this.name=name; this.age=age; } public String toString(){ return "姓名:"+this.name+"年龄:"+this.age; } } public class HashMapDemo03{ public static void main(String[] args){ Map<Person,String> map= new HashMap<Person,String>(); map.put(new Person("武开英",22),"a"); map.put(new Person("武开英2",22),"b"); map.put(new Person("武开英3",22),"c"); System.out.println(map.get(new Person("武开英",22))); //取不出值,内容为空。 } }结果为空:就是当Map中的key不是系统类时,当你要查询某个key对应的alue时,这样是无法查出的,要覆写equals 和hashCode
import java.util.Map ; import java.util.HashMap ; class Person{ private String name ; private int age ; public Person(String name,int age){ this.name = name ; this.age = age ; } public String toString(){ return "姓名:" + this.name + ";年龄:" + this.age ; } public boolean equals(Object obj){ if(this==obj){ return true ; } if(!(obj instanceof Person)){ return false ; } Person p = (Person)obj ; if(this.name.equals(p.name)&&this.age==p.age){ return true ; }else{ return false ; } } public int hashCode(){ return this.name.hashCode() * this.age ; } }; public class HashMapDemo08{ public static void main(String args[]){ Map<Person,String> map = null ; map = new HashMap<Person,String>() ; map.put(new Person("张三",30),"zhangsan"); // 增加内容 System.out.println(map.get(new Person("张三",30))) ; } };
相关文章推荐
- 为实现非系统类作为Map的key需要覆写hashCode()和equals()方法
- 对象作为 map 的 key 时,需要重写 equals 方法和 hashCode 方法
- HashCode 和 Equals 的使用 - 使用自定义对象作为HashMap的Key例子
- [项目bug收集整理2] Map的key,如果是非内置对象,需要自己实现hashCode和equals方法
- java中map使用非系统类作为key
- java中hashMap使用一个对象作为key时,对key进行唯一性表达重写equals()方法
- HashMap将对象作为key为什么需要重写equals和hashcode方法
- java中map使用非系统类作为key
- map中无法使用TCHAR*作为key的解决方法
- [项目bug收集整理2] Map的key,如果是非内置对象,需要自己实现hashCode和equals方法
- Java 中正确使用 hashCode 和 equals 方法
- 正确使用 hashCode 和 equals 方法
- 使用Set集合时,覆写hashCode()和equals()方法
- Java 中正确使用 hashCode 和 equals 方法
- 【转】Java 中正确使用 hashCode 和 equals 方法
- Java 中正确使用 hashCode 和 equals 方法
- 使用EqualsBuilder和HashCodeBuilder实现hashCode()和equals()方法
- Java的HashCode 和 equals使用方法
- Java 中正确使用 hashCode 和 equals 方法
- Java 中正确使用 hashCode 和 equals 方法