LinkedHashMap中是否包含一個Key的判斷

在LinkedHashMap中,如果需要使用一個對象作爲key, 要做get時,往往沒辦法保存當初put操作時的key object的reference,此時,需要讓key object覆蓋如下hashCode()和equals(Object obj)的實現。這樣就可以通過containsKey 來判斷是否包含此對象了。

package com.tian.menu.entity;


import android.util.Log;


public class MenuOrderInfoKey {
private int id;
private int status;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public int getStatus() {
return status;
}
public void setStatus(int status) {
this.status = status;
}
public int getFlavor() {
return flavor;
}
public void setFlavor(int flavor) {
this.flavor = flavor;
}
private int flavor;
public MenuOrderInfoKey(int id,int status,int flavor)
{
this.id=id;
this.status=status;
this.flavor=flavor;
 
}
@Override
public int hashCode() {
 int ret = new Integer(id).hashCode() ^ new Integer(status).hashCode()^new Integer(this.flavor) ;
// 也可以用下面這種方式計算hashCode
//  int ret = String.valueOf(id).hashCode() ^ String.valueOf(type).hashCode();
 System.out.println(ret);
 return ret;
}

@Override
public boolean equals(Object o)
{
 
MenuOrderInfoKey k=(MenuOrderInfoKey)o;
//Log.d("meeeeeeeeeeee"+k.getId()+" status"+k.getStatus()+"fl"+k.getFlavor()," msg"+id+"status"+this.status+"ff"+this.flavor);
if(k.getId()!=this.id)
return false;
if(k.getStatus()!=this.status)
return false;
if(k.getFlavor()!=this.flavor)
return false;
return true; 

}
}

=============================================下面是添加新對象時判斷是否已包含


public void addMenuInfo(MenuOrderInfo menuOrderInfo)
{
 
MenuOrderInfo current;
MenuOrderInfoKey key=new MenuOrderInfoKey(menuOrderInfo.getMenuinfo().getId(),menuOrderInfo.getStatus(),menuOrderInfo.getFlavor());
 
if(menulist.containsKey(key))
{
current=menulist.get(key);
current.setNum(menuOrderInfo.getNum()+current.getNum());
current.setChange_num(menuOrderInfo.getNum());
}else
{
menulist.put(key, menuOrderInfo);
}
 
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章