ArrayList中删除重复元素

<求助>为什么不能删除重复元素?
而且equals重写不了?

import java.util.ArrayList;
import java.util.List;

public class Work1 {
    public static void main(String[] args) {
        List<String> str=new ArrayList<>();
        str.add("张三");
        str.add("李四");
        str.add("王五");
        str.add("张三");
        str.add("aaa");
        str.add("aaa");
        str.add("bbb");
        for(int i=0;i<str.size()-1;i++) {
            for(int j=str.size()-1;j<i;j--) {
                if (str.get(j).equals(str.get(i))) {
                    str.remove(j);
                }
            }
        }
        for (String string : str) {
            System.out.println(string);
        }
    }
}

图片说明

图片说明

无法删除重复元素是因为代码写的不对:内部的for循环的判断条件错了,应该是j>i

你直接把数据往

 Set<String>

里面新增,新增完之后就是去重的了

给你一个忠告,在for循环遍历方法里边,不要牵扯到增删对象,因为这样的话,集合的大小是随之变化的,这就导致遍历的时候会略过一些数据,你可以自己写个小程序验证一下。

楼上正解 list遍历的时候 就不要再对LIST进行修改操作了 不然会GG

重新定义一个List用来装去重后的,循环原List,判断如果新List中包含,就不加入此元素,否则往新List中添加此元素:

for(int i=0;i<str.size();i++){
if(!newList.contains(str.get(i))){
newList.add(str.get(i));
}
}