HashMap values ​​(). Equals () всегда возвращает false, даже если сравнивать с другим HashMap с таким же значением - PullRequest
0 голосов
/ 08 апреля 2019

Я пытаюсь проверить, равны ли значения двух хеш-карт друг другу или нет, используя hashMap.values ​​(). Equals ().Но даже если два HashMap имеют одинаковые значения, они не считаются равными.

String s = "egg";
String t = "add";
int count = 0;
HashMap<String,Integer> hashMap = new HashMap<>();

for (int i = 0; i < s.length(); i++) {
    String val = String.valueOf(s.charAt(i));

    if (!hashMap.containsKey(val)) {
        count++;
        hashMap.put(val, count);
    } else {
        hashMap.put(val, hashMap.get(val));
    }
}

HashMap<String,Integer> hashMap2 = new HashMap<>();
int count2 = 0;
for (int j = 0; j < t.length(); j++) {
    String val = String.valueOf(t.charAt(j));

    if (!hashMap2.containsKey(val)) {
        count2++;
        hashMap2.put(val, count2);
    } else{
        hashMap2.put(val, hashMap2.get(val));
    }
}

if (hashMap.values().equals(hashMap2.values())) {
    return true;
} else {
    return false;
}

Ответы [ 2 ]

2 голосов
/ 08 апреля 2019

Поскольку hashMap.values() возвращает Collection<T>, мы не можем сравнить его с equals().Спасибо Али Бен Zarrouk за помощь.Вот реализация того, как проверить, равны ли значения двух хеш-карт или нет, без использования сторонней библиотеки.

   if(areHashMapValuesEqual(hashMap.values(),hashMap2.values())){
        return true;
    } else {
        return false;
    }

  static <T> boolean areHashMapValuesEqual(Collection<T> lhs, Collection<T> rhs) {
    boolean equals = false;
    if(lhs!=null && rhs!=null) {
        equals = lhs.size( ) == rhs.size( ) && lhs.containsAll(rhs)  && rhs.containsAll(lhs);
    } else if (lhs==null && rhs==null) {
        equals = true;
    }
    return equals;
}
2 голосов
/ 08 апреля 2019

Вы сравниваете две коллекции, они никогда не будут равны, потому что вы сравниваете две разные коллекции. Apache commons-collection имеет CollectionUtils # isEqualCollection, используйте это. Конечно, если вы создаете свой собственный класс как значение карты, реализуйте в нем equals и hashCode.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...