Дубликаты в HashSet

148
24 января 2021, 00:20
public class Car {
    String name;
    public Car(String name) {
        this.name = name;
    }
    @Override
    public String toString() {
        return "Car{" +
                "name='" + name + '\'' +
                '}';
    }
}

import java.util.HashSet;
import java.util.Set;
public class Test {
    public static void main(String[] args) {
        Car bugatti = new Car("Бугатти");
        Car ferrari = new Car("Феррари");
        Car audi = new Car("Ауди");
        Car ferrari2 = new Car("Феррари");
        Set<Car> set = new HashSet<>();
        set.add(bugatti);
        set.add(ferrari);
        set.add(audi);
        set.add(ferrari2);
        System.out.println(set);
    }
}

Хотел спросить, вывожу в консоль данный код и выводит:

[Car{name='Феррари'}, Car{name='Ауди'}, Car{name='Феррари'}, Car{name='Бугатти'}]

Когда я в классе Car переопределяю hashCode() и equals() у меня выводится 1 феррари вот так:

[Car{name='Феррари'}, Car{name='Бугатти'}, Car{name='Ауди'}]

Ответьте по пунктам пожалуйста:
1. Для того чтобы "дубликация не работала" вы должны в своем классе переопределить hashCode() и equals() методы? (Ну как я вижу, да).
2. Правильно ли я всё сделал? Напишите свой пример для ясности
Заранее благодарю вас за помощь!

Answer 1
  1. действительно Set не допускает дубликатов, сравнение объектов происходит через equals, поэтому с формальной точки зрения ваши классы Car не равны друг другу т.к. в реализации equals по умолчанию сравниваются ссылки
  2. в собственных классах отображающих какую-либо предметную область (машину в вашем случае) переопределение equals и hashCode обязательно
READ ALSO
Сравнение двух изображений

Сравнение двух изображений

Пишу программу, используя эту статью: https://moluchru/archive/115/31188/ Мой алгоритм не правильно распознает

104
Netbeans 11 java BUILD FAILED

Netbeans 11 java BUILD FAILED

Компилирую проект java web в netbeans 11, JDK-8В проекте ошибок нет, но не собирается, - BUILD FAILED

100
Создать приложение для чтения книг под android на Java

Создать приложение для чтения книг под android на Java

Подскажите, пожалуйста, алгоритм - куда двигаться, чтобы создать приложение для чтения книг под androidМожет быть какая-нибудь готовая библиотека...

124
Поиск данных между двумя датами

Поиск данных между двумя датами

Есть метод, который ищет данные между двумя датамиНо не включительно

85