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;
}
}