Выполняет ли заказчик договор equals()
?
Если не реализует equals()
и hashCode()
, то listCustomer.contains(customer)
будет проверять, если точно такой же экземпляр уже существует в списке (К примеру, я имею в виду один и тот же объект - адрес памяти, и т.д.). Если вы хотите проверить, является ли тот же Клиент (возможно, это тот же клиент, если у них есть то же имя клиента или номер клиента) уже в списке, тогда вам необходимо переопределить equals()
, чтобы обеспечить что он проверяет, соответствуют ли соответствующие поля (например, имена клиентов).
Примечание: не забудьте переопределить hashCode()
, если вы собираетесь переопределить equals()
! В противном случае у вас могут возникнуть проблемы с вашими HashMaps и другими структурами данных.Для хорошего освещения причин этого и того, что можно избежать, подумайте о том, чтобы взглянуть на главы Effective Java Джоша Блоха на equals()
и hashCode()
(Ссылка содержит только информацию о том, почему вы должны реализовать hashCode()
при реализации equals()
, но есть хорошее покрытие о как переопределить equals()
тоже).
Кстати, есть ограничение на заказ на вашем наборе? Если нет, немного более простой способ решить эту проблему использовать Set<Customer>
так:
Set<Customer> noDups = new HashSet<Customer>();
noDups.addAll(tmpListCustomer);
return new ArrayList<Customer>(noDups);
Что будет красиво удалить дубликаты для вас, так как наборы не допускает дубликатов. Однако это потеряет любое упорядочение, которое было применено к tmpListCustomer
, так как HashSet
не имеет явного заказа (вы можете обойти это, используя TreeSet
, но это не совсем связано с вашим вопросом). Это может немного упростить ваш код.
вы не должны писать код, как это в Java, так же, как вы не должны писать свои собственные процедуры сортировки в Java. Если у него есть возможность сделать это через нечто вроде Set, используйте это. –