Java ArrayList重复

时间:2015-01-12 13:18:35

标签: java arraylist

我正在做一个小程序的问题。我想添加一个名字和地址的新客户,并将它们保存到ArrayList中。没有任何问题,但我需要代码,因此无法添加具有相同名称的客户。希望有人可以帮助我!

Ĵ

4 个答案:

答案 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}},不允许重复输入。)
  • 您需要在Customer类中实现比较器(和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");