zoukankan      html  css  js  c++  java
  • 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

      

  • 相关阅读:
    Python for Data Science
    Python for Data Science
    Python for Data Science
    Python for Data Science
    Python for Data Science
    Python for Data Science
    Python for Data Science
    Python for Data Science
    Python for Data Science
    软件工程实践总结
  • 原文地址:https://www.cnblogs.com/achengmu/p/7502447.html
Copyright © 2011-2022 走看看