Javaの2つのLinkedHashMapsの等価性をチェックしたいと思います。JavaのLinkedHashMapsの等価性をチェックする方法 - 挿入オーダーを考慮していますか?
equals()
-methodはAbstractMap
にあり、比較されたリストに同じキーと値が存在するかどうかをチェックして入力します。このように、挿入順序はチェックされません。
package com.stackoverflow.tests;
import java.util.LinkedHashMap;
public class LinkedHashMapEqualsTest {
public static void main(String[] args) {
LinkedHashMap<String, String> lhm1 = new LinkedHashMap<String, String>();
lhm1.put("A", "1");
lhm1.put("B", "2");
lhm1.put("C", "3");
LinkedHashMap<String, String> lhm2 = new LinkedHashMap<String, String>();
lhm2.put("A", "1");
lhm2.put("B", "2");
lhm2.put("C", "3");
LinkedHashMap<String, String> lhm3 = new LinkedHashMap<String, String>();
lhm3.put("A", "1");
lhm3.put("C", "3");
lhm3.put("B", "2");
LinkedHashMap<String, String> lhm4 = new LinkedHashMap<String, String>();
lhm4.put("A", "1");
lhm4.put("B", "2");
LinkedHashMap<String, String> lhm5 = new LinkedHashMap<String, String>();
lhm5.put("A", "2");
lhm5.put("B", "2");
lhm5.put("C", "3");
if(lhm1.equals(lhm1)) {
System.out.println("Positive control. - SUCCESS");
}
if(lhm1.equals(lhm2)) {
System.out.println("lhm1 does equal lhm2; as expected. - SUCCESS");
}
if(lhm1.equals(lhm3)) {
System.out.println("lhm1 does equal lhm3, although the insert-order is different.");
}
if(!lhm1.equals(lhm4)) {
System.out.println("Negative control 1. - SUCCESS");
}
if(!lhm1.equals(lhm5)) {
System.out.println("Negative control 2. - SUCCESS");
}
}
}
はどのようにしても、挿入順序を比較リストの両方で同じであるかどうかを確認することができますか?任意の拡張せずにこれを行うための
equalsメソッドをオーバーライドする必要があります。デフォルトでは、 'Abstract Map'のequals実装を使用します。その実装では、EntrySetの挿入順序を調べるために地図を反復処理する必要があります。 – SacJn
パフォーマンスがそれほど重要ではない場合は、エントリセットからアレイリストを作成してみてください。新しいArrayList <>(lhm1.entrySet())。equals(新しいArrayList <>(lhm2.entrySet())) '。リストが等しくなるようにするには、それらの順序は同じでなければならず、LinkedHashMapのエントリセットにも挿入順序があるので、リストにもその順序があります。もちろん、エントリセットを直接操作するメソッドを作成することもできます。 – Thomas