Порядок вставки та пошуку 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.