HashMap集合中containsKey方法

 

   1、 containsKey(Object key)功能介绍:如果此映射包含指定键的映射关系,则返回 true

    remove(Object key) 如果存在此键的映射关系,则将其从映射中移除 ,否则返回null。

   2、问题描述 :

--------------------创建实体类-------------------------

         public class Foods{


private int id; // 商品编号在数据库中是唯一的

private String name; // 商品名称

//保留此不带参数的构造方法

      

        public Foods()

{

}

public  Foods(int id,String name)

{

this.id = id;

this.name = name;

           

        public int getId() {

return id;

}


public void setId(int id) {

this.id = id;

}


public String getName() {

return name;

}


public void setName(String name) {

this.name = name;

}


}

----------------------new一个food对象并放入HashMap集合中---------------------------

     Foods food=new Foods(101,"二哈");  

     HashMap<Foods,int> map=new HashMap<Foods,int>();

     map.put(food,2);

-----------------------new一个和上述一样的food对象并在上述map中查询,删除food对象----

     Foods food=new Foods(101,"二哈");

      map.containsKey(food);//返回值为false;

     map.remove(food);//返回null

----------------------------原因分析------------------------------------

     虽然两个food的是相同的,但是两个food的存储地址不同,所以两个food.hashCode() 是不同的。

----------------------------处理方法--------------------------------------

   在Foods类中改写 hashCode()和 equals(Object obj);

@Override

public int hashCode() {

// TODO Auto-generated method stub

return this.getId()+this.getName().hashCode();

           //因为这里判断的标准是只要两个foods的对象的属性是相同的则认为两个foods对象是同一个对象

        

}


@Override

public boolean equals(Object obj) {

// TODO Auto-generated method stub

if(this==obj)//判断形参是不是实参的索引

{

return true;

}

if(obj instanceof Foods)//判断形参和实参是不是同一类

{

Items i = (Foods)obj;// 将形参转化成和实参为相同的类型

if(this.getId()==i.getId()&&this.getName().equals(i.getName()))

{     //比较形参和实参的属性是否相同

return true;

}

else

{

return false;

}

}

else

{

return false;

}

}