Як вставити об’єкт у 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.