java:Map借口及其子类HashMap四
2023-09-14 08:57:51 时间
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 Web Servlet (Part C)- HttpServletRequest & HttpServletResponse
- java工具类-Java对象转换成Map
- Java遍历取出Map集合key-value数据的4种方法
- java怎么输出保留两位小数_剖析Java输出怎么保留两位小数「建议收藏」
- java启动器_JAVA基础:Java 启动器如何查找类
- MySQL字段类型如何转为java_Java JDBC中,MySQL字段类型到JAVA类型的转换
- JAVA string转map_java怎么转业务
- java list 转json 字符串_Java之JSON字符串与List集合之间相互转换
- JAVA遍历数组的三种方法_java遍历object数组
- java字符串转换为json对象6_Json对象与Json字符串的转化、JSON字符串与Java对象的转换…
- php代码混淆加密算法_java代码混淆加密
- java打印菱形思路[通俗易懂]
- java 数字信封_【Java密码学】使用Bouncy Castle生成数字签名、数字信封
- Java多线程例子
- Java JUC并发包之CyclicBarrier循环栅栏
- Java Socket多线程编程示例详解编程语言
- Java学习笔记之九java二维数组及其多维数组的内存应用拓展延伸详解编程语言
- java synchronized详解编程语言
- 实现Java程序操作MySQL数据库(java调用mysql)
- Java Map.containsValue()方法:判断Map集合中是否包含指定的键值
- 时间使用Java操作Redis实现数据过期时间管理(redisjava过期)
- 如何在Linux系统下成功安装Java?(linux下安装java)
- 深入认识Java面试与MySQL及其思考(java面试mysql)
- Redis使用get查询Map(redis获取map命令)
- 基于java中反射的总结分析