Я хотел бы проверить равенство двух LinkedHashMaps в Java.Как проверить равенство LinkedHashMaps в Java - также учитывается порядок вставки?
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. По умолчанию используется равная реализация «Абстрактной карты». поэтому вместе с этой реализацией вам нужно выполнить итерацию по карте, чтобы проверить порядок вставки в EntrySet. – SacJn
Если производительность не такая большая, вы можете попробовать и создать списки массивов из наборов записей, например. 'new ArrayList <> (lhm1.entrySet()). equals (новый ArrayList <> (lhm2.entrySet())). Для того чтобы списки были равны, их порядок должен быть одинаковым, а набор записей LinkedHashMap также имеет порядок вставки, так что списки также имеют этот порядок. Конечно, вы можете просто создать метод, который работает непосредственно на наборах записей. – Thomas