So fügen Sie ein Objekt an einer bestimmten Position in eine ArrayList ein


78

Angenommen, ich habe eine ArrayList mit Objekten der Größe n. Jetzt möchte ich ein anderes Objekt an einer bestimmten Position einfügen, beispielsweise an der Indexposition k (größer als 0 und kleiner als n), und ich möchte, dass andere Objekte an und nach der Indexposition k eine Indexposition nach vorne verschieben. Gibt es also eine Möglichkeit, dies direkt in Java zu tun? Eigentlich möchte ich die Liste sortiert halten, während ich ein neues Objekt hinzufüge.

Antworten:


151

Um einfügen Wert in Arraylist an bestimmten Index, zu verwenden:

public void add(int index, E element)

Diese Methode verschiebt die nachfolgenden Elemente der Liste. Sie können jedoch nicht garantieren, dass die Liste sortiert bleibt, da das neue Objekt, das Sie einfügen, möglicherweise gemäß der Sortierreihenfolge an der falschen Position sitzt.


Verwenden Sie Folgendes, um das Element an der angegebenen Position zu ersetzen :

public E set(int index, E element)

Diese Methode ersetzt das Element an der angegebenen Position in der Liste durch das angegebene Element und gibt das Element an der angegebenen Position zurück.


aber ich denke, es wird das Objekt an dieser
Indexposition

9
@Harsh gibt es eigentlich nichts zu denken - die Dokumente sind ziemlich spezifisch, was diese Methode download.oracle.com/javase/6/docs/api/java/util/… , E)
denis.solonenko

1
@ Harsh zu ersetzen, können Sie set (int index, Object Obj)
Learner

1
Was ist das Problem beim Sortieren? "Das neue Objekt, das Sie einfügen, befindet sich möglicherweise gemäß der Sortierreihenfolge an der falschen Position." Wenn ich also die Arrayliste von 0 bis zur richtigen Stelle zum Einfügen gehe, stecke ich sie hinein und die rechte Seite der Liste verschiebt eine in die richtig ... warum ist die ordnung gestört? ps Java sabbert Ruby Rules
Light24bulbs

Beachten Sie, dass dies add()optional ist. Dies bedeutet, dass nicht alle Java-Implementierungen von ArrayListoder ListObjekte im Allgemeinen diese Methode unbedingt unterstützen.
EntangledLoops

70

Hier ist das einfache Beispiel für eine Arrayliste zum Einfügen in einen bestimmten Index

ArrayList<Integer> str=new ArrayList<Integer>();
    str.add(0);
    str.add(1);
    str.add(2);
    str.add(3); 
    //Result = [0, 1, 2, 3]
    str.add(1, 11);
    str.add(2, 12);
    //Result = [0, 11, 12, 1, 2, 3]

7
Ich bevorzuge diese Antwort, weil sie die Ergebnisse der Anrufe anzeigt.
Uhr

2

Beachten Sie, dass Sie beim Einfügen in eine Liste an einer Position tatsächlich an einer dynamischen Position innerhalb der aktuellen Elemente der Liste einfügen . Siehe hier:

http://tpcg.io/0KmArS

package com.tutorialspoint;

import java.util.ArrayList;

public class ArrayListDemo {
   public static void main(String[] args) {

      // create an empty array list with an initial capacity
      ArrayList<Integer> arrlist = new ArrayList<Integer>(5);

      // use add() method to add elements in the list
      arrlist.add(15, 15);
      arrlist.add(22, 22);
      arrlist.add(30, 30);
      arrlist.add(40, 40);

      // adding element 25 at third position
      arrlist.add(2, 25);

      // let us print all the elements available in list
      for (Integer number : arrlist) {
         System.out.println("Number = " + number);
      }  
   }
}

$ javac com / tutorialspoint / ArrayListDemo.java

$ java -Xmx128M -Xms16M com / tutorialspoint / ArrayListDemo

Exception in thread "main" java.lang.IndexOutOfBoundsException: Index: 15, Size: 0
    at java.util.ArrayList.rangeCheckForAdd(ArrayList.java:661)
    at java.util.ArrayList.add(ArrayList.java:473)
    at com.tutorialspoint.ArrayListDemo.main(ArrayListDemo.java:12)


1

Tatsächlich ist der Weg, dies bei Ihrer spezifischen Frage zu tun, arrayList.add(1,"INSERTED ELEMENT");wo 1 die Position ist


0

Sie müssen ArrayIndexOutOfBounds selbst bearbeiten, wenn Sie zu einer bestimmten Position hinzufügen.

Der Einfachheit halber können Sie diese Erweiterungsfunktion in Kotlin verwenden

/**
 * Adds an [element] to index [index] or to the end of the List in case [index] is out of bounds
 */
fun <T> MutableList<T>.insert(index: Int, element: T) {
    if (index <= size) {
        add(index, element)
    } else {
        add(element)
    }
}

-1

Zum Beispiel:

Ich möchte das Element in der ArrayList vom 23. auf den 1. Platz (Index == 0) verschieben, also setze ich das 23. Element auf einen temporären Wert und entferne es aus der Liste und füge es auf den 1. Platz in der Liste ein. Es hat funktioniert, aber nicht effizienter.

 List<ItemBean> list = JSON.parseArray(channelJsonStr,ItemBean.class);
    for (int index = 0; index < list.size(); index++) {
        if (list.get(index).getId() == 23) { // id 23
            ItemBean bean = list.get(index);
            list.remove(index);
            list.add(0, bean);
        }
    }

-1

Diese Methode Hängt das angegebene Element an das Ende dieser Liste an.

add(E e) //append element to the end of the arraylist.

Diese Methode Fügt das angegebene Element an der angegebenen Position in diese Liste ein.

void add(int index, E element) //inserts element at the given position in the array list.

Diese Methode Ersetzt das Element an der angegebenen Position in dieser Liste durch das angegebene Element.

set(int index, E element) //Replaces the element at the specified position in this list with the specified element.
      

      
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.