Java 如何使用两种方法从数组列表中删除重复项?

Java 如何使用两种方法从数组列表中删除重复项?,java,Java,第一种方法查找重复项,第二种方法将其删除。 我尝试了以下代码,但它不起作用。我不明白为什么。需要使用两种方法来完成。当我调用这些方法时,它们不会删除重复项。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

第一种方法查找重复项,第二种方法将其删除。 我尝试了以下代码,但它不起作用。我不明白为什么。需要使用两种方法来完成。当我调用这些方法时,它们不会删除重复项。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);
        }
    }
}
publicstaticintfind(arraylists,inti){
对于(int j=i+1;j=0){
s、 删除(i);
}
}
}
别担心:

public static List<String> removeDups(final List<String> orig)
{
    return new ArrayList<>(new LinkedHashSet<>(orig));
}
publicstaticlist-removeDups(最终列表源)
{
返回新的ArrayList(新的LinkedHashSet(orig));
}

(注意使用
LinkedHashSet
,我们希望保留元素迭代顺序)

为什么不直接将其转储到集合中

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());
List listdeplicates=newarraylist(10);
//向列表中添加元素
Set as=新的HashSet(listdeplicates);
List listunique=新的ArrayList(as.size());

listunique现在提供unique元素

如果您想使用两种方法,并且遵循您的相同想法,您可以将您的方法修改为:

   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);
            }
        }
    }
publicstaticint-find(列表s,int-j){

对于(int i=j;i如果您使用的是Java 8,则可以使用流API和
distinct()
操作来消除重复项:

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]
List List=Arrays.asList(5,3,6,5,4,6);
List filtered=List.stream().distinct().collect(Collectors.toList());
System.out.println(“过滤:+过滤);//[5,3,6,4]

我已检查了您的代码,它运行正常,并从列表中删除了重复项。您可以更改RemovedUpplicates方法以删除列表中稍后出现的重复项

 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);
                }
            }
        }
移除的公共静态无效副本(ArrayList s){
对于(int i=0;i=0){
s、 移除(foundAt);
}
}
}

不使用
Set
的任何原因?代替
s.get(i)==s.get(j)
使用
s.get(i).equals(s.get(j))