第一种方法找到副本,第二种方法删除它。 我尝试了以下代码,但它不起作用。我不明白为什么。要用两种方法完成。当我调用方法时,它们不会删除重复项。 arraylist没有变化。我想使用两种方法删除重复项。
public static int find(ArrayList<String> s, int i) {
for (int j = i + 1; j < s.size(); j = j + 1) {
if (s.get(i) == s.get(j)) {
return j;
}
}
return -1;
}
public static void removeDuplicates(ArrayList<String> s) {
for (int i = 0; i < s.size(); i = i + 1) {
int foundAt = (find(s, i));
if (foundAt >= 0) {
s.remove(i);
}
}
}
答案 0 :(得分:1)
不要被打扰:
public static List<String> removeDups(final List<String> orig)
{
return new ArrayList<>(new LinkedHashSet<>(orig));
}
(注意使用LinkedHashSet
,我们希望保留元素迭代排序)
答案 1 :(得分:0)
为什么不直接将其转储到Set
中List<String> listduplicates = new ArrayList<String>(10);
//add elements to the list
Set<String> as = new HashSet<String>(listduplicates );
List<String> listunique = new ArrayList<String>(as.size());
listunique现在提供了独特的元素
答案 2 :(得分:0)
如果您想使用两种方法,并遵循相同的想法,您可以修复您的方法:
public static int find(List<String> s, int j) {
for(int i=j;i<s.size();i++) {
if (s.lastIndexOf(s.get(i)) != i) {
return i;
}
}
return -1;
}
public static void removeDuplicates(ArrayList<String> s) {
for (int j=0; j<s.size();j++) {
int i = -1;
while((i=find(s,j))>=0) {
s.remove(i);
}
}
}
答案 3 :(得分:0)
如果您使用的是Java 8,则可以使用带有distinct()
操作的Stream API来消除重复项:
List<Integer> list = Arrays.asList(5, 3, 6, 5, 4, 6);
List<Integer> filtered = list.stream().distinct().collect(Collectors.toList());
System.out.println("filtered: " + filtered); // [5, 3, 6, 4]
答案 4 :(得分:0)
我检查了你的代码,它运行正常并从列表中删除重复项。您可以更改removeDuplicates方法以删除列表中稍后的重复项。
public static void removeDuplicates(ArrayList<String> s) {
for (int i = 0; i < s.size(); i = i + 1) {
int foundAt = (find(s, i));
if (foundAt >= 0) {
s.remove(foundAt);
}
}
}