Як вставити об’єкт у ArrayList у певній позиції


78

Припустимо, у мене є ArrayList об’єктів розміром n. Тепер я хочу вставити інший об'єкт у конкретній позиції, скажімо, в позиції індексу k (більше 0 та менше n), і я хочу, щоб інші об'єкти в позиції k після індексу k змістили одну позицію індексу вперед. Тож чи є спосіб зробити це безпосередньо на Java. Насправді я хочу зберегти список відсортованим під час додавання нового об'єкта.

Відповіді:


153

Щоб вставити значення в ArrayList за певним індексом, використовуйте:

public void add(int index, E element)

Цей метод змістить наступні елементи списку. але ви не можете гарантувати, що Список залишатиметься відсортованим, оскільки новий Об’єкт, який ви вставляєте, може знаходитися в неправильному положенні відповідно до порядку сортування.


Щоб замінити елемент у вказаному положенні, використовуйте:

public E set(int index, E element)

Цей метод замінює елемент у зазначеній позиції у списку вказаним елементом і повертає елемент, який раніше був у зазначеній позиції.


але я думаю, що це замінить об'єкт у цій позиції індексу
Harshveer Singh

9
@Harsh, насправді нема про що думати - документи досить конкретні щодо того, що цей метод завантажує.
Oracle.com/javase/6/docs/api/java/util/…

1
@Harsh для заміни ви можете використовувати set (int index, Object Obj)
Учень

1
в чому проблема сортування? "новий об'єкт, який ви вставляєте, може сидіти в неправильному положенні відповідно до порядку сортування", тому, якщо я проходжу по списку списків від 0 до тих пір, поки не знайду потрібне місце для вставки, то вставте його, і права частина списку зміститься на правильно ... чому порушується порядок? ps java слюнить рубінові правила
light24bulbs

Зауважте, що add()це необов’язково, тобто не всі реалізації Java ArrayListі Listоб’єкти загалом не обов’язково підтримуватимуть цей метод.
EntangledLoops

70

Ось простий приклад списку аргументів для вставки за певним показником

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
Я віддаю перевагу цій відповіді, оскільки вона відображає результати дзвінків.
aroth

2

Зверніть увагу, що коли ви вставляєте в Список у певній позиції, ви дійсно вставляєте в динамічну позицію в поточних елементах Списку . Дивіться тут:

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

Насправді спосіб зробити це з вашого конкретного питання - arrayList.add(1,"INSERTED ELEMENT");де 1 - це позиція


0

Ви повинні обробляти ArrayIndexOutOfBounds самостійно, додаючи до певної позиції.

Для зручності ви можете використовувати цю функцію розширення в Kotlin

/**
 * 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

Цей метод додає вказаний елемент до кінця цього списку.

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

Цей метод вставляє вказаний елемент у вказану позицію в цьому списку.

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

Цей метод замінює елемент у зазначеній позиції у цьому списку на вказаний елемент.

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

      
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.