1

起初我有这样的事情:

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

然后发现不行,不行。我正在检查对象 a 中的每个元素是否与对象 b 中的相同,而不使用迭代或集合。在同一个地方......有什么建议吗?在 keySet() 上实现 for-each 循环会起作用吗?

那么,沿着这些思路?需要同时考虑和值:(不是答案 - 建议的测试代码)

4

3 回答 3

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())
于 2013-11-09T19:43:54.100 回答
3

这个怎么样 :

设置 values1 = new HashSet(map1.values());
设置 values2 = new HashSet(map2.values());
布尔等于 = values1.equals(value2);
于 2013-11-09T19:39:40.533 回答
1

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

比较地图的正确方法是:

  1. 检查地图的大小是否相同(!)
  2. 从一个地图中获取一组键
  3. 对于您检索的该集合中的每个键,检查从每个映射中检索到的该键的值是否相同
于 2013-11-09T19:44:32.907 回答