Nano Hash - криптовалюты, майнинг, программирование

Сравнение объектов в JAVAЧасть 2

Этот пост является продолжением моего предыдущего поста, найденного здесь

Сравнение объектов на предмет равенства: JAVA

Основываясь на полученных предложениях, я создал следующий класс и сделал переопределение equals(), hashcode() .... все, используя Eclipse IDE. Однако я все еще получаю false, когда сравниваю два разных объекта, которые ссылаются на один и тот же класс, используя метод contains() массива, в котором хранятся эти объекты. Я не знаю, что не так в моей реализации. Хотелось бы помощи в устранении неполадок.

public class ClassA {

private String firstId;
private String secondId;
/**
 * @return the firstId
 */
public String getFirstId() {
    return firstId;
}
/**
 * @param firstId the firstId to set
 */
public void setFirstId(String firstId) {
    this.firstId = firstId;
}
/**
 * @return the secondId
 */
public String getSecondId() {
    return secondId;
}
/**
 * @param secondId the secondId to set
 */
public void setSecondId(String secondId) {
    this.secondId = secondId;
}
/* (non-Javadoc)
 * @see java.lang.Object#hashCode()
 */
public int hashCode() {
    final int PRIME = 31;
    int result = 1;
    result = PRIME * result + ((firstId == null) ? 0 : firstId.hashCode());
    result = PRIME * result + ((secondId == null) ? 0 : secondId.hashCode());
    return result;
}
/* (non-Javadoc)
 * @see java.lang.Object#equals(java.lang.Object)
 */
public boolean equals(Object obj) {
    if (this == obj)
        return true;
    if (obj == null)
        return false;
    if (getClass() != obj.getClass())
        return false;
    final ClassA other = (ClassA) obj;
    if (firstId == null) {
        if (other.firstId != null)
            return false;
    } else if (!firstId.equals(other.firstId))
        return false;
    if (secondId == null) {
        if (other.secondId != null)
            return false;
    } else if (!secondId.equals(other.secondId))
        return false;
    return true;
}

}

ClassA clsA1 = new ClassA();
ClassA clsA2 = new ClassA();

clsA1.setFirstId("value1");
clsA1.setSecondId("value2");

clsA2.setFirstId("value1");
clsA2.setSecondId("value2");

ArrayList a1 = new ArrayList();
ArrayList a2 = new ArrayList();

a1.add(clsA1);
a2.add(clsA2);

if(a1.contains(clsA2)
{
    System.out.println("Success");
}
else
{ 
    System.out.println("Failure");
}

Я получаю результат как «Отказ»


Ответы:


1

Я проверил ваш код и получил успех в Netbeans. Опечатка отсутствует ")" в if(a1.contains(clsA2)

«Конечно, это терпит неудачу. Ваши строки id пусты в вашем тестовом коде, и метод equals написан так, чтобы возвращать false, если это происходит. Возможно, вам следует разрешить равенство, если и firstId, и secondId равны нулю, или если один из них равен нулю, другой матч». Не совсем правильно.

Если оба идентификатора равны нулю, при равенстве будет возвращено значение true. Только если одного ID нет.

14.02.2012
  • извините, я обновил свой код. Оба свойства объекта имеют одинаковое значение... но я получаю отказ.... 14.02.2012
  • Единственное, что я сейчас вижу, это отсутствие ), надеюсь, у вас это правильно в вашем коде? if(a1.contains(clsA2) ‹‹== { System.out.println(Успех); } else { System.out.println(Ошибка); } 14.02.2012
  • Извините, ребята....это была моя вина. Я получал данные из таблицы, которую не должен был использовать. Это дало результаты, которых я не ожидал, и, следовательно, этот вопрос. Приведенный выше код работает просто отлично. Спасибо всем за помощь. 15.02.2012

  • 2

    Вы получаете «Отказ», потому что проверяете, содержит ли a1 clsA2, когда вы не добавили clsA2 к a1. Проверка, должен ли a2.contains(clsA2) печатать "Успех"

    14.02.2012
  • хорошо, моя идея состоит в том, чтобы сравнить, есть ли объект clsA2, который эквивалентен чему-то в clsA1, который находится в массиве, содержащем объекты типа clsA1. 14.02.2012
  • Ах хорошо. Кажется, тогда это должно было сработать. Я бы попробовал выполнить метод equals с помощью отладчика, чтобы увидеть, какая проверка не удалась. 14.02.2012

  • 3

    Я просто скопировал и проверил ваш код. Я получил Успех. Вы пропустили только скобку после a1.contains(clsA2). Генерируемый затмением equals() правильно обрабатывает null.

    14.02.2012
    Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..