java 仅使用for循环移除ArrayList中的重复项

p8ekf7hl  于 2022-12-17  发布在  Java
关注(0)|答案(6)|浏览(154)

您将获得以下数字序列:1、652、5、15、385、4、55、666、13、2、4658、9、55、-588、10、1083、17、4。您可以仅使用For循环和ArrayList删除重复的数字。

public class Ex {
    public static void main(String[] args) {

        ArrayList list = new ArrayList();
        list.add(1);
        list.add(652);
        list.add(5);
        list.add(15);
        list.add(385);
        list.add(4);
        list.add(55);
        list.add(666);
        list.add(13);
        list.add(2);
        list.add(4658);
        list.add(9);
        list.add(55);
        list.add(-588);
        list.add(10);
        list.add(1083);
        list.add(17);
        list.add(4);

        System.out.println("Before remove : " + list);

        for (int i = 0; i < list.size(); i++) {
            for (int j = 1; j < list.size(); j++) {
                if (list.get(i) == list.get(j)) {
                    list.remove(j);
                }
            }
        }
        System.out.println("After remove duplicate items : "+list);
    }
}

产出

Before remove : [1, 652, 5, 15, 385, 4, 55, 666, 13, 2, 4658, 9, 55, -588, 10, 1083, 17, 4]
After remove duplicate items : [1, 5, 385, 55, 13, 4658, -588, 1083, 4]

一些没有重复的项目丢失了。例如10和652。

33qvvth1

33qvvth11#

你有很多问题:
1.当i == j时,您将移除非重复记录。为避免此情况,内部循环应以int j = i + 1开始。
1.删除记录时,应该递减j,因为被删除元素后面的所有元素都下移一个索引。
1.您应该将Integer s与equals进行比较,而不是与==进行比较

0md85ypi

0md85ypi2#

内部循环总是以j = 1开始,这意味着你将移除列表中除了索引0处的元素之外的每一个元素。你应该改为j = i + 1。内部循环将只检查列表中的以下元素,而不是你正在比较的元素。移除之后,你应该使用j--,这样下一个元素的索引对应于j。当比较基元类型(int)时,可以使用==;当比较引用类型(Integer)时,应该使用equals
这是我的建议:

for (int i = 0; i < list.size(); i++) {
        for (int j = i + 1; j < list.size(); j++) {
            if (list.get(i) == list.get(j)) {
                list.remove(j);
                j--;
            }
        }
    }
eoigrqb6

eoigrqb63#

其他值呢?15或666?您确定您期望正确的输出吗?使用Iterator从列表中删除元素要好得多:

public static ArrayList<Integer> removeDuplicates(ArrayList<Integer> numbers) {
    ListIterator<Integer> it = numbers.listIterator();
    numbers.removeIf(num -> isDuplicated(numbers, it.previousIndex(), num));
    return numbers;
}

private static boolean isDuplicated(ArrayList<Integer> numbers, int toPos, int val) {
    for (int pos = 0; pos < toPos; pos++)
        if (numbers.get(pos) == val)
            return true;

    return false;
}

输出:

Before remove : [1, 652, 5, 15, 385, 4, 55, 666, 13, 2, 4658, 9, 55, -588, 10, 1083, 17, 4]
After remove duplicate items : [1, 652, 5, 15, 385, 4, 55, 666, 13, 2, 4658, 9, 55, -588, 10, 1083, 17, 4]
qgelzfjb

qgelzfjb4#

public class ArrayListExample {
    public static void main(String[] args) {
        // ArrayList with duplicate elements
        ArrayList<Integer> numbersList = new ArrayList<>(Arrays.asList(1, 1, 2, 3, 3, 3, 4, 5, 6, 6, 6, 7, 8));
        System.out.println(numbersList);
        Log.d("DBG",numbersList+"");
        // ArrayList without duplicate elements
        LinkedHashSet<Integer> hashSet = new LinkedHashSet<>(numbersList); 
        ArrayList<Integer> listWithoutDuplicates = new ArrayList<>(hashSet);
        System.out.println(listWithoutDuplicates);
        Log.d("DBG",listWithoutDuplicates+"");
    }
}

输入

[1, 1, 2, 3, 3, 3, 4, 5, 6, 6, 6, 7, 8]

输出

[1, 2, 3, 4, 5, 6, 7, 8]
vwkv1x7d

vwkv1x7d5#

// Code for Duplicates not allowed ... for upper example
for(int i = 0; i < list.size(); i++) {
            for(int j = i + 1; j < list.size(); j++) {
                if(list.get(i).equals(list.get(j))){
                    list.remove(j);
                    j--;
                }
            }
0wi1tuuw

0wi1tuuw6#

公共类删除复制{

public static void main(String[] args) {
    List<Integer> list=new ArrayList<Integer>();
    list.add(1);
    list.add(652);
    list.add(5);
    list.add(15);
    list.add(385);
    list.add(4);
    list.add(55);
    list.add(666);
    list.add(13);
    list.add(2);
    list.add(4658);
    list.add(9);
    list.add(55);
    list.add(-588);
    list.add(10);
    list.add(1083);
    list.add(17);
    list.add(4);
        System.out.println(list);
        
        for(int i=0;i<list.size();i++)
        {
            for(int j=i+1;j<list.size();j++)
            {
                
                if(list.get(i)==list.get(j))
                {
                    list.remove(j);
                }
            }
        }
        System.out.println(list);

}

}

相关问题