Program z porównaniem Tablic

0

Witam, mam pewien problem, a mianowicie chce zrobić taki jakby "filtr". Mamy dwie Tablice jedna jest updatowana(zmieniana wartość) przez osobny wątek i jeżeli jest inna od drugiej tablicy porównawczej to tablica porównawcza jest równa tej głównej i już się nie wykonuje to co się ma wykonywać. Ale gdy znowu zmienimy wartość tablicy głównej to od początku.
Ja próbowałem zrobić to tak:

if (socketContainer.equals(fakeSocketContainer)) {
	porownanie = true;
}
 else {
	porownanie = false;
	System.out.println("false|");
 }

if(!porownanie){
	TestowaKlasa.this.server.writeToAll(socketContainer.toString());
	fakeSocketContainer = socketContainer;
}

Ale nie działa, domyślam się że dlatego bo fakeSocketContainer pozostaje tak jakby socketContainer i przy updacie informacji on też się updatuje.

Próbowałem też że fakeSocketContainer jest Stringiem ("co zadziałało"), i przypisujemy mu wartość socketContainer.toString(); ale po 3-4 powtórzeniu wykonaniu wywala error w konsoli:
Exception in thread "Thread-8" java.util.ConcurrentModificationException
** at java.util.ArrayList$Itr.checkForComodification(Unknown Source)**
** at java.util.ArrayList$Itr.next(Unknown Source)**
** at java.util.AbstractCollection.toString(Unknown Source)**

0

Czy to:

fakeSocketContainer = socketContainer 

nie jest przypadkiem przypisaniem referencji i nie skutkuje tym, że obie referencje wskazują na tą samą listę? Myślę, że to zauważyłeś. Musisz kopiować elementy listy, a nie referencje do nich. Jak? Wujek google Ci odpowie: http://www.java-examples.com/copy-elements-one-java-arraylist-another-java-arraylist-example

0

coś nie chce to zadziałać
dodałem:

Collections.copy(socketContainer,fakeSocketContainer);
System.out.println(socketContainer+"--"+fakeSocketContainer);

i socketContainer ma wartości a fake nie, nie kopiuje go.

0

A jaka jest wartość fakeSocketContainer przed kopiowaniem?

0

No null(tzn. pusta) bo to socketContainer kopiuje do fake.

1

Zajrzałeś do dokumentacji? copy kopiuje tyle ile się zmieści, nie zwiększa kolekcji. Na dodatek kopiuje w drugą stronę. Najprościej będzie tak:

fakeSocketContainer = new ArrayList<...>(socketContainer);
0

Na razie działa :d, dzięki.

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