通过两个TreeMaps迭代以在Java中进行比较

时间:2013-11-09 19:33:24

标签: java comparison treemap

起初我有这样的事情:

public static boolean equals(TreeMap<?, Boolean> a, TreeMap<?, Boolean> b) {
    boolean isEqual = false;
    int count = 0;
    if (a.size() == b.size()) {
        for (boolean value1 : a.values()) {
            for (boolean value2 : b.values()) {
                if (value2 == value1) {
                    count++;
                    isEqual = true;
                    continue;
                } else {
                    isEqual = false;
                    return isEqual;
                }
            }
        }
        if (count == a.size()) {
            return true;
        }
    }
}

然后发现nope它不起作用。我正在检查Object a中的每个元素是否与Object b中的相同,而不使用Iterate或Collection。并在同一个地方...任何建议?是否可以在keySet()上实现for-each循环?

那么,沿着这些方向呢?需要考虑 BOTH 键和值:(不是答案 - 建议的测试代码)

3 个答案:

答案 0 :(得分:4)

values()备份TreeMap时,这应该有效,因此会根据键值进行排序。

List<Boolean> aList = new ArrayList<>(a.values());
List<Boolean> bList = new ArrayList<>(b.values());

boolean equal = aList.equals(bList);

这应该比HashSet版本快一点。

这不会起作用,因为@AdrianPronk注意到了:

a.values().equals(b.values())

答案 1 :(得分:3)

这个怎么样:

Set values1 = new HashSet(map1.values());
Set values2 = new HashSet(map2.values()); 
boolean equal = values1.equals(value2);

答案 2 :(得分:1)

对于在java中比较两个地图对象,您可以将地图的键添加到列表中,使用这两个列表,您可以使用方法retainAll()和removeAll()并将它们添加到另一个公共键列表和不同的键列表。

比较地图的正确方法是:

  1. 检查地图是否大小相同(!)
  2. 从一张地图中获取一组键
  3. 对于您检索到的每个组中的每个键,检查从该键的每个映射中检索的值是否相同