Порядок вставки та пошуку ArrayList


88

Припустимо, я вставляю 5 рядків у файл ArrayList. Чи буде порядок вставки та вилучення з того ArrayListсамого однаковий?


88
Одна справа спробувати один раз. Інша впевненість у тому, що це буде незмінно кожного разу.
— Сурагч

Відповіді:


82

Перевірте код нижче і запустіть його:

public class ListExample {

    public static void main(String[] args) {
        List<String> myList = new ArrayList<String>();
        myList.add("one");
        myList.add("two");
        myList.add("three");
        myList.add("four");
        myList.add("five");

        System.out.println("Inserted in 'order': ");
        printList(myList);
        System.out.println("\n");
        System.out.println("Inserted out of 'order': ");

        // Clear the list
        myList.clear();

        myList.add("four");
        myList.add("five");
        myList.add("one");
        myList.add("two");
        myList.add("three");

        printList(myList);
    }

    private static void printList(List<String> myList) {
        for (String string : myList) {
            System.out.println(string);
        }
    }
}

Видає такий результат:

Inserted in 'order': 
one
two
three
four
five


Inserted out of 'order': 
four
five
one
two
three

Для отримання детальної інформації зверніться до документації: List (Java Platform SE7)


8
+1 за включення посилання на документ Java, що чітко пояснює порядок.
— Ogre Psalm33

20
Вихідні дані були б корисними
— nilesh

1
Прекрасний приклад. +1 за це.
— Паван Тіварі

123

Так . ArrayList - це послідовний список . Отже, порядок вставки та пошуку є однаковим.

Якщо ви додасте елементи під час отримання , порядок не залишиться незмінним.


1
Якщо ОП "вставляє" в кінці, також називається додавання.
— Peter Lawrey,

2
друге твердження означає, що під час отримання одним потоком втручається інший потік, щоб додати новий елемент. тоді порядок не залишається таким же
— xpioneer

38

Якщо ви завжди додаєте до кінця, тоді кожен елемент буде доданий до кінця і залишатиметься таким, поки ви його не зміните.

Якщо ви завжди вставляєте на початку, кожен елемент відображатиметься у зворотному порядку, в якому ви їх додали.

Якщо ви вставите їх посередині, порядок буде іншим.


12

Так, це завжди буде однаково. З документації

Додає зазначений елемент до кінця цього списку. Параметри: Е-елемент, який потрібно додати до цього списку Повертає: true (як зазначено у Collection.add (java.lang.Object))

add()Реалізація ArrayList

public boolean More ...add(E e) {
    ensureCapacity(size + 1);  // Increments modCount!!
    elementData[size++] = e;
    return true;
}

-1

Так, це залишається незмінним. але чому б це не легко перевірити? Складіть ArrayList, заповніть його, а потім отримайте елементи!


19
Хоча це не доказ.
— YoTengoUnLCD

1
Те саме замовлення - лише один із можливих результатів тесту. Якщо реалізація є чорним ящиком, той самий порядок може бути конкретним випадком. Приклад - відсортований список. Якщо ви додаєте елементи до відсортованого списку у належному порядку, ви можете отримати їх у відсортованому порядку (що є лише окремим випадком), але якщо ви додаєте їх у випадковому порядку, ви отримуєте їх упорядковані. Тестування ArrayList без перевірки реалізації просто стверджує "швидше за все однаковий порядок".
— simar
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.