2016-06-16 1 views
-1

So habe ich eine Karte definiert alsJava Karte/TreeMap: Ändern eines bestehenden Eintrags ohne Eintrag löschen

Map<Integer, Object[]> data = new TreeMap<Integer, Object[]>(); 

und ich bin Hinzufügen von Daten, wie ich Schleife durch und eine Textdatei lesen. Für die meisten Daten werde ich es hinzufügen und weitermachen. In der Datei befinden sich jedoch Daten, die auf einen vorhandenen Eintrag angewendet werden müssen, ohne ihn zu löschen oder seine Position zu entfernen. Beispiel.

data.put(counter, new Object[] {ex1, ex2, ex3, ex4}); 

Also, wenn ich erwarte einen Eintrag hinzuzufügen, waren Daten haben, später würde ich hinzufügen müssen (EDIT: Es kann angehängt werden), gibt es Möglichkeit, die vorhandenen Daten zu halten und neue Daten anhängen? Beispiel.

Zuerst

data.put(counter, new Object[] {"testData1", "testData2", "testData3", "testData4"}); 

Wenn ich Schleife auf Daten, die hinzugefügt werden muss, ich muss nur in der Lage sein „testData5“ in die Endposition hinzufügen, während der Wert des Zählers zu wissen, wann die Daten ursprünglich hinzugefügt wurde .

Gibt es eine Möglichkeit, dies zu tun, ohne die vorhandenen Daten in diesem spezifischen Eintrag zu löschen?

Edit: Die Daten können angehängt werden, Beispiel dafür geändert werden.

+0

Also haben Sie keine Möglichkeit zu wissen, dass die Daten in dem dritten Element gesetzt werden müssen das Array, in diesem Beispiel? – Zircon

+0

Ich bin mir nicht sicher, ob ich Ihre Frage verstehe. Lassen Sie mich überarbeiten, das Element, das hinzugefügt werden muss, kann angehängt werden, aber ich muss alle anderen Informationen erhalten. – Racehorse35

+4

Wie wäre es mit List anstelle von Arrays? –

Antwort

1

Mit Ihren Arrays ist es ziemlich chaotisch. Ich stimme den Kommentaren zu, dass Sie Listen verwenden sollten, mit denen Sie einfach die Listenreferenz verwenden können und nichts mehr auf der Karte festlegen müssen.

Verwenden von Arrays (Nasty!)

while(/* fancy argument */) { 
    int counter; //you promised me this 
    String argument; //and this 

    Object[] foo = data.get(counter); //find what is stored on the map 
    Object[] bar; //our expected result 

    if(foo == null) { //create a new array and append it 
     bar = new Object[1]; 
     bar[0] = argument; 
    } 
    else { //fill the new array 
     bar = new Object[foo.length+1]; 
     for(int i = 0; i < foo.length; i++) { 
      bar[i] = foo[i]; 
     } 
     bar[foo.length] = argument; 
    } 

    data.set(counter, bar); //put the updated array into the map 
} 

Verwenden von Lists (Clean!)

while(/* fancy argument */) { 
    int counter; //you promised me this 
    String argument; //and this 

    List<Object> foo = data.get(counter); //find what is stored on the map 
    //and we don't need bar since we can play with foo 

    if(foo == null) { //we have a new list we need to add 
     foo = new ArrayList<>(); 
     data.set(counter, foo); //put it in the map 
    } 

    foo.add(argument); //add to list, don't need to re-put since it's already there 
}