Map应用-使用自定义类实例化Map对象

为了验证Map对象的特性,使用自定义类实例化Map对象,代码如下:

package com.mldn;
import .util.Map;
import .util.HashMap;
import .util.Set;
import .util.Iterator;
public class MapDemo
{
        public static void main(String[] args)
        {
                Map map = null;        // 声明映射,键、值类型为String,Person
                map = new HashMap();        // 用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:~$ 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 = null;        // 声明映射,键、值类型为String,Person
                map = new HashMap();        // 用HashMap实例化
                map.put(new Person(“张三”, 20), “zhangsan”);        // 设置键值对
                for (Map.Entry me : map.entrySet())        // 匿名对象,不能像String那样直接以key访问value,只能用foreach
                {                                                                                                        // 因为默认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 = null;        // 声明映射,键、值类型为String,Person
                map = new HashMap();        // 用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
关注公众号:智乐兔

赞赏

wechat pay微信赞赏alipay pay支付宝赞赏

上一篇
下一篇

相关文章

在线留言

你必须 登录后 才能留言!

在线客服
在线客服 X

售前: 点击这里给我发消息
售后: 点击这里给我发消息

智乐兔官微