比较两个map的内容?

miracleliu 2011-09-13 02:35:39

我有两个map,一个是我的map;
一个是别人修改的map,
我想找出新map比原来的map有哪些改变。有什么好方法?
...全文
922 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
qybao 2011-09-13
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 softroad 的回复:]
ls的map2.get(e.getKey()).equals(e.getValue())可能会NullPointException的
[/Quote]
做下null判断就可以了
if (map2.get(e.getKey())==null && e.getValue()==null) {

} else if (map2.get(e.getKey()) == null || e.getValue() == null ||
!map2.get(e.getKey()).equals(e.getValue())) {
System.out.println("修改了key:" + e.getKey());
}
softroad 2011-09-13
  • 打赏
  • 举报
回复
ls的map2.get(e.getKey()).equals(e.getValue())可能会NullPointException的
qybao 2011-09-13
  • 打赏
  • 举报
回复
[Quote=引用楼主 miraclestar 的回复:]
我有两个map,一个是我的map;
一个是别人修改的map,
我想找出新map比原来的map有哪些改变。有什么好方法?
[/Quote]

如果是判断key有没有变动,可以用集合的交并差试试看
for example

//假设map1是旧,map2是新,假设Map的泛型是Map<XX,YY>
int flag = 0;
for (XX xx : map1.keySet().removeAll(map1.keySet())) {
System.out.println("新增了key:" + xx);
flag = 1;
}
for (XX xx : map1.keySet().removeAll(map2.keySet())) {
System.out.println("删除了key:" + xx);
flag = 2;
}
if (flag == 0) {
System.out.println("key没有变动");
}


如果key和value都要判断,就用循环
for(Map.EntrySet<XX,YY> e : map1.entrySet()) {
if (map2.containsKey(e.getKey())) {
if (!map2.get(e.getKey()).equals(e.getValue())) {
System.out.println("修改了key:" + e.getKey());
}
} else {
System.out.println("删除了key:" + e.getKey());
}
}
for (XX xx : map2.keySet().removeAll(map1.keySet())) {
System.out.println("新增了key:" + e.getKey());
}
softroad 2011-09-13
  • 打赏
  • 举报
回复

Map<String, String> mapA = new HashMap<String, String>();
Map<String, String> mapB = new HashMap<String, String>();
Map<String, String> mapAdd = new HashMap<String, String>(mapB);
Map<String, String> mapDel = new HashMap<String, String>();
Map<String, String> mapChange = new HashMap<String, String>();
Map<String, String> mapUnChange = new HashMap<String, String>();

Iterator<String> it = mapA.keySet().iterator();

while(it.hasNext()) {
String key = it.next();
String val = mapA.get(key);

if(mapB.containsKey(key)) {
String bVal = mapB.get(key);

if(val != null && val.equals(bVal) || val == bVal) {
mapUnChange.put(key, val);
}
else {
mapChange.put(key, val);
}

mapAdd.remove(key);
}
else {
mapDel.put(key, val);
}
}
}
paneyjiang 2011-09-13
  • 打赏
  • 举报
回复

遍历取出原来的map 中的key,value然后用下面的方法比较
[Quote=引用 1 楼 lasher521 的回复:]
Map 中的方法:
boolean containsKey(Object key)
boolean containsValue(Object value)
[/Quote]
LASHER521 2011-09-13
  • 打赏
  • 举报
回复
Map 中的方法:
boolean containsKey(Object key)
boolean containsValue(Object value)

67,513

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧