【发布时间】:2017-11-17 09:20:22
【问题描述】:
我有一个值列表 {"16","b","c","d","e","16","f","g","16","b"} ; 在这 16 和 b 重复,所以我想删除它们的所有条目,我需要输出为 c、d、e、f、g。下面的程序工作正常。有更好的解决方案吗?
public class Test {
public static void main(String[] args) {
ArrayList < String > l = new ArrayList < String > ();
String[] str = {
"16",
"b",
"c",
"d",
"e",
"16",
"f",
"g",
"16",
"b"
};
for (String s: str) {
l.add(s);
}
List ll = removeDups(l);
l.removeAll(ll);
System.out.println("Final List " + l);
}
private static List < String > removeDups(ArrayList < String > l) {
List < String > ll = new ArrayList < String > ();
for (String a: l) {
int x = Collections.frequency(l, a);
if (x > 1) {
ll.add(a);
}
}
return ll;
}
}
【问题讨论】:
-
在 Stackoverflow 上发布问题之前,请解释代码或对其进行评论。它对每个人都有帮助。
-
事实上,
removeDups方法确实应该被称为findDups,因为它实际上并没有删除任何东西;它只是找到重复的项目。如果将l.removeAll(ll)行移到removeDups内部,那么removeDups实际上值得这个名字。 -
考虑到 Collections.frequency 的顺序是
O(n),你可以使用哈希映射做得更好。 -
我投票结束这个问题,因为它属于codereview.stackexchange.com
-
@DawoodibnKareem:这个问题与stackoverflow.com/questions/203984/… 不重复。也不是解决方案。您提到的链接中建议的解决方案将为每个重复元素保留一个条目。但这里的问题是如果重复,则删除每个元素。它甚至不应该出现在列表中的
once。
标签: java arraylist duplicates core