2013-11-25 16 views
35

Zum Beispiel bewegen: Eine ListeWie bestimmtes Element in Array-Liste auf das erste Element

ABCDE

Gegeben C, Switch zu

CABDE

Beachten Sie, dass die Array-Größe ändern , einige Artikel können in Laufzeiten entfernt werden

Diese Staatsmänner t funktioniert nicht, weil es C B A D E nicht C A B D E ausgibt, wie man es repariert?

Danke.

+0

Was ist URL hier? –

Antwort

58

Was Sie wollen, ist eine sehr teure Operation in einem ArrayList. Es erfordert, dass jedes Element zwischen dem Anfang der Liste und dem Ort C um eins nach unten verschoben wird.

Allerdings, wenn Sie es wirklich wollen tun:

int index = url.indexOf(itemToMove); 
url.remove(index); 
url.add(0, itemToMove); 

Wenn dies eine häufige Betätigung für Dich ist, und mit wahlfreiem Zugriff ist eher weniger häufig, können Sie wie LinkedList auf einem anderen List Implementierung Schalen berücksichtigen. Sie sollten auch überlegen, ob eine Liste überhaupt die richtige Datenstruktur ist, wenn Sie sich über die Reihenfolge der Elemente Sorgen machen.

+3

Wenn die Geschwindigkeit ein Kriterium ist, sollten Sie sich vielleicht auch http://commons.apache.org/proper/commons-collections/javadocs/api-3.2.1/org/apache/commons/collections/list/TreeList ansehen. html –

9

verwenden: Remove: ArraylistObj.remove(object); an bestimmten Position hinzu: ArrayListObj.add(position, Object);

Wie pro Ihren Code verwenden diese:

url.remove("C"); 
url.add(0,"C"); 
+1

ist es nicht wird die Größe der Liste erhöhen? –

+0

Dann entfernen Sie das Element aus der Liste mit url.remove ("C"); und füge das Element an der Nullposition hinzu, indem du url.add (0, "C") verwendest; –

3

Das Problem ist, tauschen Sie C mit A, so ABCDE CBAD E.

Sie wird so etwas wie dies versuchen könnte:

url.remove(itemToMove); 
url.add(0, itemToMove); 

Oder wenn url ist ein LinkedList:

url.remove(itemToMove); 
url.addFirst(itemToMove); 
0

Dieser Code wird können Sie Größe der Liste erhöhen und Elemente einfügen, ohne sonst störende Reihenfolge der Liste

private void insert(double price){ 
    for(int i = 0; i < keys.size(); i++){ 
     if(price > keys.get(i)){ 
      keys.add(null); 
      for(int j = keys.size()-1; j > i; j--){ 
       Collections.swap(keys, j, j-1); 
      } 
      keys.add(price); 
      Collections.swap(keys, keys.size()-1, i); 
      keys.remove(keys.size()-1); 
      return; 
     } 
    } 
    keys.add(price); 
} 
0

Lassen Sie sagen, Sie ein Array haben:

String[] arrayOne = new String[]{"A","B","C","D","E"}; 

Jetzt können Sie die C bei Index 0 erhalten die C in eine andere Variable

String characterC = arrayOne[2]; 

nun die Schleife laufen wie folgt platzieren möchten:

for (int i = (2 - 1); i >= 0; i--) { 

      arrayOne[i+1] = arrayOne[i]; 
     } 

Oberhalb 2 ist Index von C.Nun C bei Index zum Beispiel einfügen auf 0

arrayOne[0] = characterC; 

Ergebnis oben Schleife wie das sein wird:

arrayOne: {"C","A","B","D","E"} 

Das Ende, wir unser Ziel erreichen.

1

Eine andere Lösung, wechseln Sie einfach von 0 zu indexOf(itemToMove).

Dies ist meine Kotlin Version:

val list = mutableListOf('A', 'B', 'C', 'D', 'E') 
(0..list.indexOf('C')).forEach { 
    Collections.swap(list, 0, it) 
} 

Sorry, ich bin nicht vertraut mit Java, aber gelernt, ein wenig Kotlin. Aber der Algorithmus ist der gleiche.

Verwandte Themen