在将它添加到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);
}
}
}
}
答案 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。