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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
LinkedHashMapHashMap 的子类,它在 HashMap 的基础上增加了按照插入顺序或者访问顺序来迭代元素的能力。LinkedHashMap 常用的方法包括: 1. put(key, value):向 map 添加一个映射关系。 2. get(key):获取指定 key 的 value。 3. remove(key):根据 key 删除映射关系。 4. clear():清空 map 的所有映射关系。 5. size():返回 map 映射关系的数量。 6. containsKey(key):判断是否包含指定的 key。 7. containsValue(value):判断是否包含指定的 value。 8. keySet():返回 map 所有 key 的集合。 9. values():返回 map 所有 value 的集合。 10. entrySet():返回 map 所有映射关系的集合。 11. getOrDefault(key, defaultValue):获取指定 key 的 value,如果不存在则返回 defaultValue。 12. forEach(action):对 map 每个映射关系执行 action 操作。 13. replace(key, oldValue, newValue):替换指定 key 的 oldValue 为 newValue。 14. putIfAbsent(key, value):如果 map 不存在指定 key 的映射关系,则添加一个映射关系。 15. computeIfAbsent(key, mappingFunction):如果 map 不存在指定 key 的映射关系,则根据 mappingFunction 的计算结果添加一个映射关系。 16. computeIfPresent(key, remappingFunction):如果 map 存在指定 key 的映射关系,则根据 remappingFunction 的计算结果更新映射关系。 17. merge(key, value, remappingFunction):将指定 key 的 value 与指定值合并,并根据 remappingFunction 的计算结果更新映射关系。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值