我正在做一个小程序的问题。我想添加一个名字和地址的新客户,并将它们保存到ArrayList中。没有任何问题,但我需要代码,因此无法添加具有相同名称的客户。希望有人可以帮助我!
Ĵ
答案 0 :(得分:1)
在客户类
中使用hashset和override方法equals和hashcode@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;
}
答案 1 :(得分:1)
目前尚不清楚你到底做了什么以及你的代码如何运作,所以我们所能提供的只是一些一般指导:
ArrayList
允许重复值。您可能需要重新考虑您使用的集合类型,或实现代码,以通过Set
首先Set
实现推送客户对象来避免重复,例如{{ 1}},不允许重复输入。)HashSet
方法),以便您的代码知道如何评估客户实例是否与另一个实例重复。根据您的要求,您将使用客户名称作为比较器和equals
方法的基础(尽管使用简单的名称对我来说似乎有些天真)。答案 2 :(得分: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。
答案 3 :(得分: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");