• 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

      

  • 相关阅读:
    浅谈Linux下CPU利用率和CPU负载【转】
    Linux用户抢占和内核抢占详解(概念, 实现和触发时机)--Linux进程的管理与调度(二十)【转】
    内核中断,异常,抢占总结篇【转】
    内核中dump_stack()的实现,并在用户态模拟dump_stack()【转】
    嵌入式系统C编程之堆栈回溯【转】
    嵌入式系统C编程之错误处理【转】
    在代码中获取调用者函数的名字【转】
    手动跟踪函数的调用过程【转】
    用户态使用 glibc/backtrace 追踪函数调用堆栈定位段错误【转】
    Linux运行时I/O设备的电源管理框架【转】
  • 原文地址:https://www.cnblogs.com/achengmu/p/7502447.html
Copyright © 2020-2023  润新知