Заказчик выполняет договор 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
, но это не совсем относится к вашему вопросу). Это может немного упростить ваш код.