java:Map借口及其子类HashMap四

使用非系统对象作为key,使用匿名对象获取数据

在Map中可以使用匿名对象找到一个key对应的value.

person:

public class HaspMapPerson {

	private String name;
private int age; public HaspMapPerson(String name, int age)
{
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 "姓名:" + name + ", 年龄:" + age ;
} }

  

main:

Map<String, HaspMapPerson> allSet = new HashMap<String, HaspMapPerson>();
allSet.put("zhangsan", new HaspMapPerson("zhangsan",30));
allSet.put("lisi", new HaspMapPerson("lisi",33)); //获取value值
System.out.println( allSet.get(new String("zhangsan")) );

结果:姓名:zhangsan, 年龄:30

另外一种情况:

key:是对象, value是string

则无法通过key找到value,为什么之前的string可以?这里需要实现equals()和hashCode来区分是否是同一个对象。

//通过key找到value
Map<HaspMapPerson, String> map = new HashMap<HaspMapPerson, String>();
map.put(new HaspMapPerson("zhangsan",30), "zhangsan");
map.put(new HaspMapPerson("lisi",33), "lis"); System.out.println( map.get(new HaspMapPerson("zhangsan",30)) );

  

结果为:null

需要修改Person中的 equals()和hashCode()方法:

增加:

public int hashCode()
{
return this.name.hashCode() * this.age;
} public boolean equals(Object o)
{ if(this == o)
{
return true;
}
if( !(o instanceof HaspMapPerson) )
{
return false;
}
HaspMapPerson p = (HaspMapPerson) o;
if( this.name.equals(p.getName()) && this.age == p.getAge() )
{
return true;
}else {
return false;
}
}

  

Person:

public class HaspMapPerson {

	private String name;
private int age; public HaspMapPerson(String name, int age)
{
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 "姓名:" + name + ", 年龄:" + age ;
} public int hashCode()
{
return this.name.hashCode() * this.age;
} public boolean equals(Object o)
{ if(this == o)
{
return true;
}
if( !(o instanceof HaspMapPerson) )
{
return false;
}
HaspMapPerson p = (HaspMapPerson) o;
if( this.name.equals(p.getName()) && this.age == p.getAge() )
{
return true;
}else {
return false;
}
} }

  

执行结果:

zhangsan

  

java:Map借口及其子类HashMap四的更多相关文章

  1. java:Map借口及其子类HashMap五,identityHashMap子类

    java:Map借口及其子类HashMap五,identityHashMap子类 了解:identityHashMap子类 一般情况下,标准的Map,是不会有重复的key值得value的,相同的key ...

  2. java:Map借口及其子类HashMap二

    java:Map借口及其子类HashMap二 重点:所有的集合必须依赖Iterator输出 Map<String, Integer> map = new HashMap<String ...

  3. java:Map借口及其子类

    java:Map借口及其子类 Conllection是保存单值最大得父接口(即没有key的数据),那么Map是保存的内容是一对键值的数据,即KEY->VALUE的形式保存,如电话簿等. Map常 ...

  4. ava:Map借口及其子类HashMap三

    ava:Map借口及其子类HashMap三 HashMap常用子类(异步非安全线程,性能高: Hashtable:同步的安全线程,性能低) map(HashMap)中的key,value可以通过 Se ...

  5. Java 数据类型:集合接口Map:HashTable;HashMap;IdentityHashMap;LinkedHashMap;Properties类读取配置文件;SortedMap接口和TreeMap实现类:【线程安全的ConcurrentHashMap】

    Map集合java.util.Map Map用于保存具有映射关系的数据,因此Map集合里保存着两个值,一个是用于保存Map里的key,另外一组值用于保存Map里的value.key和value都可以是 ...

  6. Java中List,ArrayList、Vector,map,HashTable,HashMap区别用法

    Java中List,ArrayList.Vector,map,HashTable,HashMap区别用法 标签: vectorhashmaplistjavaiteratorinteger ArrayL ...

  7. Java容器类List、ArrayList、Vector及map、HashTable、HashMap的区别与用法

    Java容器类List.ArrayList.Vector及map.HashTable.HashMap的区别与用法 ArrayList 和Vector是采用数组方式存储数据,此数组元素数大于实际存储的数 ...

  8. java.map使用

    Map以按键/数值对的形式存储数据,和数组非常相似,在数组中存在的索引,它们本身也是对象.       Map的接口       Map---实现Map       Map.Entry--Map的内部 ...

  9. JAVA提高十二:HashMap深入分析

    首先想说的是关于HashMap源码的分析园子里面应该有很多,并且都是分析得很不错的文章,但是我还是想写出自己的学习总结,以便加深自己的理解,因此就有了此文,另外因为小孩过来了,因此更新速度可能放缓了, ...

随机推荐

  1. 关于quartusII 错误 Error: Current license file does not support the EP*** device 错误原因总结

    关于quartusII 错误 Error: Current license file does not support the EP*** device 错误原因总结 第一,有的人用了破解文件lice ...

  2. 【SQLServer2008】之Telnet以及1433端口设置

    Telnet步骤: 一.首先进入Win7控制面板,可以从开始里找到或者在桌面上找到计算机,点击进入里面也可以找到控制面板,如下图: 二.进入控制面板后,我们再找到“程序和功能”并点击进入,如下图所示: ...

  3. Java中synchronized用在静态方法和非静态方法上面的区别

    synchronized 修饰在 static方法和非static方法的区别   在Java中,synchronized是用来表示同步的,我们可以synchronized来修饰一个方法.也可以sync ...

  4. 嵌入式开发之davinci--- 8148/8168/8127 中的High-DefinitionVideo Processing Subsystem (HDVPSS)

    High-DefinitionVideo Processing Subsystem (HDVPSS) 这一章介绍了高清视频处理子系统(HDVPSS). 2.1导论 2.1.1 简介 HDVPSS 使用 ...

  5. 嵌入式驱动开发之sensor---"VIP0 PortA", "VIP0 PortB", "VIP1 PortA", "VIP1 PortB",dvo0(vout1) dvo1(vout0)

    (1)vip 简介 (2)vip 电路图 (3)vip 更换采集相机输入 (4)vip 驱动 ---------------------author:pkf --------------------- ...

  6. IOS启动页动画(uiview 淡入淡出效果 )2

    Appdelegate里面右个这个函数,只要它没结束,你的等待界面就不会消失.以在启动的时候做些动画 - (BOOL)application:(UIApplication *)application ...

  7. C#数组 多个集合和数组的操作(合并,去重,拆分,判断)

    http://www.cnblogs.com/liguanghui/archive/2011/11/09/2242309.html http://www.cnblogs.com/dreamszx/ar ...

  8. group_concat函数导致的主从同步异常

    group_concat函数导致的主从同步异常的问题总结 今天在处理一个group_concat函数导致的主从异常的问题,排查过程比较简单,不过第一次遇到这个问题记录一下排查的思路,后面如果再遇到其他 ...

  9. sgu 1348 Goat in the Garden 2【点到线段的距离】

    链接: http://acm.timus.ru/problem.aspx?space=1&num=1348 http://acm.hust.edu.cn/vjudge/contest/view ...

  10. [Oracle]根据字段值全库搜索相关数据表和字段

    这个需求比较冷门,但对于在某些特定的情况下,还是会有这样的需要的.好在Oracle实现还比较方便,用存储过程则轻松实现. 查询字符串: create or replace procedure sear ...