本例场景
Arraylist中每个add()的元素是 (new)一个HashMap, 需要对hashMap中的value判断是否相等,如果相等则remove掉任意一个相同的元素(hashMap)。
代码
if (type ==2){
int i=0;
List<JxmdPurchase> jxmdPurchases = purchaseMapper.selectByExample(new JxmdPurchaseExample());
if (jxmdPurchases != null && jxmdPurchases.size() > 0) {
for (JxmdPurchase purchase : jxmdPurchases) {
if ( !StrUtil.isEmpty(purchase.getShop()) ){
Map<String, Object> map = new HashMap<>();//k是唯一的
map.put("id", purchase.getId());
map.put("name", purchase.getShop());
shopNameList.add((T) map);
if (shopNameList.size()>=2 && i-1<shopNameList.size()){
HashMap t0 = (HashMap) shopNameList.get(i);
HashMap t1 = (HashMap) shopNameList.get(i+1);
// String name = String.valueOf(t0.get("name"));
// String name1 = String.valueOf(t1.get("name"));
//==与 equals的区别? 本例中使用 == 不会出现remove操作;而使用equals会执行
if (t0.get("name").equals(t1.get("name"))){
// if (t0.get("name") == t1.get("name")){
shopNameList.remove(i); }
else { i++; }
}
}
}
}
判断ArrayList中 的两个hashMap是否存在相同的 value。
场景1 使用 ==来判断。运行结果以及debug分析截图
DeBug分析
场景2 -使用 equals来判断
综合分析
两组[to,t1] 各自只有 value值的value不同,其他的都一样。
结论:
==比较的是value中的value值,也就是字符数组的值, 字符属于基本类型。字符两次的数字不相同,导致 k,v中的value不相等。
而 equals则是比较的是hash值。比较的是地址。