Как сравнить две карты по их значениям - PullRequest
12 голосов
/ 20 апреля 2010

Как сравнить две карты по их значениям? У меня есть две карты, содержащие одинаковые значения, и я хочу сравнить их по их значениям. Вот пример:

    Map a = new HashMap();
    a.put("foo", "bar"+"bar");
    a.put("zoo", "bar"+"bar");

    Map b = new HashMap();
    b.put(new String("foo"), "bar"+"bar");
    b.put(new String("zoo"), "bar"+"bar");

    System.out.println("equals: " + a.equals(b));            // obviously false

    .... what to call to obtain a true?

[[ РЕДАКТИРОВАТЬ: кто-то, пожалуйста, отредактируйте и исправьте этот вопрос, чтобы означать то, что он на самом деле должен означать. Код выше печатает «true», а не «false». ]]

Очевидно, что осуществить сравнение не сложно, достаточно сравнить все ключи и связанные с ними значения. Я не верю, что я первый, кто сделал это, поэтому уже должны быть библиотечные функции либо в java, либо в одной из библиотек jakarta.commons.

Спасибо

Ответы [ 12 ]

0 голосов
/ 14 июня 2012

Если вы хотите сравнить две Карты, то приведенный ниже код может помочь вам

(new TreeMap<String, Object>(map1).toString().hashCode()) == new TreeMap<String, Object>(map2).toString().hashCode()
0 голосов
/ 20 апреля 2010

Результат equals в вашем примере, очевидно, ложен, поскольку вы сравниваете карту a с некоторыми значениями в ней с пустой картой b (возможно, ошибка копирования и вставки). Я рекомендую использовать правильные имена переменных (чтобы вы могли избежать ошибок такого рода), а также использовать обобщенные значения.

    Map<String, String> first = new HashMap<String, String>();
    first.put("f"+"oo", "bar"+"bar");
    first.put("fo"+"o", "bar"+"bar");

    Map second = new HashMap();
    second.put("f"+"oo", "bar"+"bar");
    second.put("fo"+"o", "bar"+"bar");

    System.out.println("equals: " + first.equals(second));

Конкатенация ваших строк не имеет никакого эффекта, потому что это будет сделано во время компиляции.

...