ArrayList<int[]> wird beim hinzufügen von werten komplett überschrieben warum?

javarian

Mitglied
Hi habe diesen code:

Java:
public  static ArrayList<int[]> tcpBuffer=new ArrayList<int[]>();
											
tcpBuffer.add(tcpM);

for(int prP2=0;prP2<tcpM.length;prP2++){
	System.out.println("tcpM: " +tcpM[prP2]);
}
											
for(int pr=0;pr<tcpBuf.size();pr++){
	int BufferArray[] = tcpBuffer.get(pr);
	System.out.println("TCP Buffer: " +BufferArray[0]+" : "+BufferArray[1]);
	}

Ausgabe:
51 : 1
tcpM: 51
tcpM: 1
TCP Buffer: 51 : 1

51 : 0
tcpM: 51
tcpM: 0
TCP Buffer: 51 : 0
TCP Buffer: 51 : 0

6 : 2
tcpM: 6
tcpM: 2
TCP Buffer: 6 : 2
TCP Buffer: 6 : 2
TCP Buffer: 6 : 2

Das Problem ist das wenn nicht alle Ankommenden Daten gespeichert werden nur die letzen und diese überschreiben auch alle anderen.. Jemand eine Idee woran es liegt?

Was ich seltsam finde die eingaben sind richtig habe es kontrolliert wie ihr seht.

Vielen lieben dank schon mal 🙂
 
Zuletzt bearbeitet:
Hi,
Siehe dir mal folgenden Code an.
In Methode test1() steht genau wie bei dir, dass für ein int- Array 3 verschiedene Werte-Paare der ArrayListe hinzugefügt werden.
Da in test1() immer die selbe int[]- Referenz an testArray(int [] tcpM) übergeben wird, werden zwar 3 tcpM-Referenzen in die ArrayList tcpBuffer eingefügt, aber die 3 int[]- Referenzen, welche am Schluss in der ArrayList vorhanden sind, sind immer die gleichen.
Wenn du nun in der Methode test1() die Werte von tcpM änderst, dann tcpM an testArray() übergibst, dann sind alle tcpM in tcpBuffer davon betroffen, da alle die selbe Referenz aufweisen.
In der Methode test2() wird jedoch für jeden Aufruf von testArray(int [] ) eine neue Referenz von tcpM erzeugt. In diesem Fall sind für alle 3 Einträge in der ArrayList unterschiedliche Referenzen und haben deshalb unterschiedliche Werte-Paare
Java:
import java.util.ArrayList;

public class Main {
    private static ArrayList<int[]> tcpBuffer = new ArrayList<int[]>();
    public static void main(String[] args) {
        test1();
        test2();
    }
    
    private static void test1() {
        tcpBuffer.clear();
        System.out.println("test1()");
        int [] tcpM = new int [] {51, 1};
        testArray(tcpM);

        tcpM[0] = 51;
        tcpM[1] = 0;
        testArray(tcpM);
        
        tcpM[0] = 6;
        tcpM[1] = 2;
        testArray(tcpM);
    }
    
    private static void test2() {
        tcpBuffer.clear();
        System.out.println("test2()");
        int [] tcpM = new int [] {51, 1};
        testArray(tcpM);
        
        tcpM = new int [] {51, 0};
        testArray(tcpM);
        
        tcpM = new int [] {6, 2};
        testArray(tcpM);
    }
    
    private static void testArray(int [] tcpM) {
        tcpBuffer.add(tcpM); 
        for(int prP2=0;prP2<tcpM.length;prP2++){
            System.out.println(" tcpM: " + tcpM[prP2]);
        }     
        for(int pr = 0; pr < tcpBuffer.size(); pr++){
            System.out.println(" TCP Buffer: " + tcpBuffer.get(pr)[0] + ": " + tcpBuffer.get(pr)[1] );
        }
    }
}
Ich hoffe, dass dies einigermassen erklärt, wieso du nicht die Werte-Paare zurück bekommst, die du erwartet hättest.

Gruss knilch
 
Zuletzt bearbeitet:

Zurück
Oben