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

その後、うまくいかないことがわかりました。Iterate や Collection を使用せずに、オブジェクト 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

これはどう :

値を設定します1 = new HashSet(map1.values());
値を設定2 = new HashSet(map2.values());
boolean equal = values1.equals(value2);
于 2013-11-09T19:39:40.533 に答える
1

Java で 2 つのマップ オブジェクトを比較するには、マップのキーをリストに追加し、これら 2 つのリストを使用して、retainAll() メソッドと removeAll() メソッドを使用して、それらを別の共通キー リストと異なるキー リストに追加できます。

マップを比較する正しい方法は次のとおりです。

  1. マップが同じサイズであることを確認してください(!)
  2. 1 つのマップからキーのセットを取得する
  3. 取得したセットの各キーについて、そのキーの各マップから取得した値が同じであることを確認します
于 2013-11-09T19:44:32.907 に答える