Usuwanie powtarzajacych się elementów z Array.

0
public void usunPowtorzenia()
    {
        for(int x : liczby)
        {
            while(liczby.lastIndexOf(x)!=liczby.indexOf(x))
            {
                liczby.remove(x);
            }
        }
         
    } 

liczby - ArrayList<Integer>

Chodziło mi o to, żeby do czasu kiedy pierwszy index arraylisty w którym na którym znajdowała się liczba był różny od ostatniego, usuwał ten pierwszy. I takby lista się zmniejszała się za każdym razem, kiedy element by się powtórzył.

Exception in thread "main" java.util.ConcurrentModificationException - Taki błąd dostałem.

Czy da się to jakoś zmodyfikować, żeby usuwało 1-szy element który się powtórzył a nie ostatni?

public void usun(int a)
	{
		liczby.remove(liczby.indexOf(a));
		--rozmiar;
	} 
0

Nie możesz przechodzić po liście i z niej usuwać.

1
liczby = liczby.stream().distinct().collect(Collectors.toList());
0

Jeśli chcesz iterować po liście i jednocześnie usuwać z niej elementy, powinieneś użyć iteratora.

3

@Mały Młot, rozwiązanie eleganckie, ale nie spełnia warunków. W liście zostaje pierwsze wystąpienie, a ma zostawać ostatnie.
@szweszwe i @olek1, niezupełnie prawda. Można przeglądać i usuwać jednocześnie, bez użycia iteratora.

        for(int i-liczby.size() - 1;i>=0;i--)
        {
            int j = liczby.indexOf(numbers.get(i));
            if(j < i)
            {
                liczby.remove(j);
            }
        }
0
Collections.reverse(liczby);

i

liczby = liczby.stream().distinct().collect(Collectors.toList());
1

Nadal nie spełnia warunku, z listy 1,2,3,2,1 ma wyjść lista 3,2,1.

1 użytkowników online, w tym zalogowanych: 0, gości: 1