Map应用-使用自定义类实例化Map对象
为了验证Map对象的特性,使用自定义类实例化Map对象,代码如下:
package com.mldn;
import java.util.Map;
import java.util.HashMap;
import java.util.Set;
import java.util.Iterator;
public class MapDemo
{
public static void main(String[] args)
{
Map
map = new HashMap
map.put(“zhangsan”, new Person(“张三”, 20)); // 设置键值对
System.out.println(map.get(“zhangsan”)); // 根据key获取value
}
}
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;
}
}
/*
administrator@xu-desktop:~$ java com.mldn.MapDemo
姓名:张三年龄:20
*/
—-发现:使用匿名自定义类Person作为值时,可以通过key获取;
但匿名类作为key时,就只能获取空的值!
—-说明:需要确定作为key的对象引用;
package com.mldn;
import java.util.Map;
import java.util.HashMap;
import java.util.Set;
import java.util.Iterator;
public class MapDemo
{
public static void main(String[] args)
{
Map
map = new HashMap
map.put(new Person(“张三”, 20), “zhangsan”); // 设置键值对
for (Map.Entry
{ // 因为默认Person的对象可以重复存在与内存中!
System.out.println(me.getKey() + “—->” + me.getValue());
}
/*
解决的办法:
1. 使用非匿名:
Person per = new Person(“张三”, 20);
map.put(per, “zhangsan”); // 可以
// 但此种方法不标准
2.标准方法:
要想使Map中的键值对象具有唯一性:必须实现唯一的HashCode,和equals方法:
覆写两个方法!
*/
}
}
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;
}
}
/*
administrator@xu-desktop:~$ java com.mldn.MapDemo
姓名:张三年龄:20—->zhangsan
*/
—-覆写hashCode,equals方法的自定义类实例化Map:
package com.mldn;
import java.util.Map;
import java.util.HashMap;
import java.util.Set;
import java.util.Iterator;
public class MapDemo
{
public static void main(String[] args)
{
Map
map = new HashMap
map.put(new Person(“张三”, 20), “zhangsan”); // 设置键值对
System.out.println(map.get(new Person(“张三”, 20))); // 直接通过自定义key访问value
}
}
class Person
{
private String name;
private int age;
public Person(String name, int age)
{
this.name = name;
this.age = age;
}
public int hashCode()
{
return this.name.hashCode() * this.age;
}
public boolean equals(Object obj)
{
if (this == obj) // 内存范围相同,肯定是同一个对象
{
return true;
}
if (!(obj instanceof Person)) // 不是实例肯定没有可比性!
{
return false;
}
Person per = (Person)obj;
{
return true;
}
else
{
return false;
}
}
public String toString()
{
return “姓名:” + this.name + “年龄:” + this.age;
}
}
/*
administrator@xu-desktop:~$ java com.mldn.MapDemo
zhangsan // 通过匿名对象key获取对应的vlaue,该匿名对象的类必须覆写两个方法:hashCode,equals;
*/
声明: 除非转自他站(如有侵权,请联系处理)外,本文采用 BY-NC-SA 协议进行授权 | 智乐兔
转载请注明:转自《Map应用-使用自定义类实例化Map对象》
本文地址:https://www.zhiletu.com/archives-122.html
关注公众号:
微信赞赏支付宝赞赏