2015-01-12 2 views
-1

У меня проблема с небольшой программой, которую я делаю. Я хочу добавить нового клиента с именем и адресом и сохранить их в ArrayList. У меня нет проблем с этим, но мне нужен код, поэтому невозможно добавить клиентов с тем же именем. Надеюсь, кто-нибудь может мне помочь!Java ArrayList Duplicates

J

+1

Пожалуйста, добавьте свой код. – Jens

+0

можете ли вы разместить свой класс клиентов? –

ответ

1

использование HashSet и метод коррекции равен и хэш-код в классе клиента

@Override 
public boolean equals(Object object) { 
    boolean result = false; 
    if (object == null || object.getClass() != getClass()) { 
     result = false; 
    } else { 
     Customer customer = (Customer) object; 
     if (this.name == customer.getname() 
       ) { 
      result = true; 
     } 
    } 
    return result; 
} 

// just omitted null checks 
@Override 
public int hashCode() { 
    int hash = 3; 
    hash = 7 * hash + this.name.hashCode(); 

    return hash; 
} 
+0

искусно, как это должно быть сделано. –

1

Это не ясно, что вы сделали и как ваш код функции до сих пор, так что все, что мы можем предоставить некоторые общее руководство:

  • Как известно, ArrayList допускает повторяющиеся значения. Возможно, вы захотите пересмотреть используемый тип коллекции, или реализовать код, чтобы избежать дублирования, нажав на объекты вашего клиента через Set (Set, например, HashSet, не допускайте дублирования записей).
  • Вам понадобится реализовать компаратор (и метод equals) в вашем классе Customer, чтобы ваш код знал, как оценить, является ли экземпляр клиента дубликатом другого. По вашему требованию вы использовали бы имя клиента в качестве основы для вашего компаратора и метод equals (хотя использование простого имени кажется мне немного наивным).
0

Вы можете реализовать что-то иное, чем List (или его реализации здесь, ArrayList), например, используйте Set (например, HashSet).

List <- Allows duplicates 
Set <- Does not allow duplicates 

Кроме того, вы должны реализовать comparable interface в объекте клиента; в соответствии с тем, что вы говорите, если имя клиента совпадает, то они являются одним и тем же клиентом.

public int compareTo(Customer c) 
{ 
    return this.name.compareTo(c.name); 
} 

или реализовать comparator.

0

Почему бы вам не использовать HashMap? Это должно решить вашу проблему. Создайте его следующим образом:

Map<String, Integer> myMap = new HashMap<String, Integer>(); 

Затем вы можете использовать его для ввода пары имени, значения. Вы можете сделать это или что угодно. Например:

Map<String, Integer> myMap = new HashMap<String, Integer>(); 
myMap.put("Bob", 215); 

Или вы можете сделать String, String и сказать:

Map<String, String> myMap = new HashMap<String, String>(); 
myMap.put("Bob", "123 Sesame St");