java:Map借口及其子类HashMap四
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四的更多相关文章
- java:Map借口及其子类HashMap五,identityHashMap子类
java:Map借口及其子类HashMap五,identityHashMap子类 了解:identityHashMap子类 一般情况下,标准的Map,是不会有重复的key值得value的,相同的key ...
- java:Map借口及其子类HashMap二
java:Map借口及其子类HashMap二 重点:所有的集合必须依赖Iterator输出 Map<String, Integer> map = new HashMap<String ...
- java:Map借口及其子类
java:Map借口及其子类 Conllection是保存单值最大得父接口(即没有key的数据),那么Map是保存的内容是一对键值的数据,即KEY->VALUE的形式保存,如电话簿等. Map常 ...
- ava:Map借口及其子类HashMap三
ava:Map借口及其子类HashMap三 HashMap常用子类(异步非安全线程,性能高: Hashtable:同步的安全线程,性能低) map(HashMap)中的key,value可以通过 Se ...
- Java 数据类型:集合接口Map:HashTable;HashMap;IdentityHashMap;LinkedHashMap;Properties类读取配置文件;SortedMap接口和TreeMap实现类:【线程安全的ConcurrentHashMap】
Map集合java.util.Map Map用于保存具有映射关系的数据,因此Map集合里保存着两个值,一个是用于保存Map里的key,另外一组值用于保存Map里的value.key和value都可以是 ...
- Java中List,ArrayList、Vector,map,HashTable,HashMap区别用法
Java中List,ArrayList.Vector,map,HashTable,HashMap区别用法 标签: vectorhashmaplistjavaiteratorinteger ArrayL ...
- Java容器类List、ArrayList、Vector及map、HashTable、HashMap的区别与用法
Java容器类List.ArrayList.Vector及map.HashTable.HashMap的区别与用法 ArrayList 和Vector是采用数组方式存储数据,此数组元素数大于实际存储的数 ...
- java.map使用
Map以按键/数值对的形式存储数据,和数组非常相似,在数组中存在的索引,它们本身也是对象. Map的接口 Map---实现Map Map.Entry--Map的内部 ...
- JAVA提高十二:HashMap深入分析
首先想说的是关于HashMap源码的分析园子里面应该有很多,并且都是分析得很不错的文章,但是我还是想写出自己的学习总结,以便加深自己的理解,因此就有了此文,另外因为小孩过来了,因此更新速度可能放缓了, ...
随机推荐
- JAVA问题之泛型数组
java中类似下面的代码编译器是会报错的: LinkedList<LinkedList<String>>[] li=new LinkedList<LinkedList ...
- udp广播和多播
使用UDP协议进行信息的传输之前不需要建立链接, 客户端向服务器发送信息时,客户端只需要给出服务器的ip地址和端口号,可以发送信息.至于服务器端是否存在,是否能够收到该报文,客户端根本不用管. 广播( ...
- label 标签的用法,点label选中单选、复选框或文本框
<label>拥有的权限</label> <label class="checkbox" id="privilege_id" st ...
- SimpleAdapter的用法
学习listView的时候,按照例子设定item的布局为系统提供的simple_list_item_single_choice.xml@frameworks/base/core/res/res/lay ...
- 再理解 as3.0接口
As3.0 接口的理解与运用 1.把接口当作"类"来理解.你easy接受她. 我们看她的标准结构: package 包路径{ public interface 接口名称{ func ...
- mysql windows安装
http://blog.csdn.net/tossgoon/article/details/44412491 1.从该地址http://dev.mysql.com/downloads/mysql/中选 ...
- Rancher探秘一:初识Rancher
前言:最近公司需要导入k8s管理,看了一些rancher相关内容,在此做一记录,rancher系列会根据进展不定期更新. Rancher是什么? Rancher是一个开源的企业级容器管理平台.通过Ra ...
- window下安装php7的memcache扩展
安装memcache:http://www.runoob.com/memcached/memcached-connection.html1.4.4 c:\memcached\memcached.exe ...
- 一篇文章彻底弄清ARC始末
本文转载至 http://blog.csdn.net/allison162004/article/details/38758265 自动引用计数(ARC)是编译器的一个特色,提供了Objective- ...
- 【BZOJ4927】第一题 双指针+DP(容斥?)
[BZOJ4927]第一题 Description 给定n根直的木棍,要从中选出6根木棍,满足:能用这6根木棍拼 出一个正方形.注意木棍不能弯折.问方案数. 正方形:四条边都相等.四个角都是直角的四边 ...