程序没有给出期望在ArrayList中找到重复的结果

时间:2013-11-02 10:57:18

标签: java arraylist duplicates

在将它添加到arraylist之前,我必须在arraylist中找到任何重复的元素。但它没有给出正确的输出。编译和运行都不会产生任何错误。

public class MyDuplicateEntry {

    public static void main(String a[]) {
        String[] strArr = {"one", "two", "three", "four", "four", "five"};
        ArrayList<String> unique = new ArrayList<String>();

        for (String str : strArr) {
            if (!unique.add(str)) {
                System.out.println("Duplicate Entry is: " + str);
            }
        }
    }
}

1 个答案:

答案 0 :(得分:3)

虽然java.util.ArrayList.add()确实返回一个布尔值,但硬编码总是为真。

如果元素已经在列表中,您似乎已经假设它将返回false - 事实并非如此。

您必须手动检查,请参阅ArrayList.contains()

public static void main(String a[]) {
    String[] strArr = { "one", "two", "three", "four", "four", "five" };
    ArrayList<String> unique = new ArrayList<String>();

    for (String str : strArr) {
        if (unique.contains(str)) {
            System.out.println("Duplicate Entry is: " + str);
        } else {
            unique.add(str);
        }
    }
}

您也可以考虑使用Set<String>,因为这些是针对检查contains()而优化的 - 我建议使用简单的HashSet<String>

这不仅是优化的,而且意味着你可以检查add的返回码,因为如果元素已经在集合中,这将返回false:

public static void main(String a[]) {
    String[] strArr = { "one", "two", "three", "four", "four", "five" };
    HashSet<String> unique = new HashSet<String>();

    for (String str : strArr) {
        if (! unique.add(str)) {
            System.out.println("Duplicate Entry is: " + str);
        }
    }
}

备注

有关始终返回true的详细信息,请参阅ArrayList.add()上的javadoc。