ArrayList的插入和检索顺序


88

假设我在中插入5个字符串ArrayList。插入和从中检索的顺序ArrayList是否相同?


88
尝试一次是一回事。还要确保每次都相同。
Suragch 2015年

Answers:


81

检查下面的代码并运行:

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)


7
+1包括指向Java文档的链接,该链接清楚地说明了该顺序。
Ogre Psalm33

20
样本输出将很有用
Nilesh

1
很好的例子。为此+1。
Pawan Tiwari,

123

是的。ArrayList是一个顺序列表。因此,插入和检索顺序是相同的。

如果在检索期间添加元素,则顺序将保持不变。


1
如果OP“插入”结尾,也称为添加。
彼得·劳瑞

2
第二条语句表示在一个线程检索时是否有另一个线程干预以添加新元素。则顺序不会保持不变
xpioneer

38

如果始终添加到末尾,则每个元素都将添加到末尾并保持原样,直到您对其进行更改。

如果您始终在开头插入,则每个元素将以您添加它们的相反顺序出现。

如果将它们插入中间,则顺序将有所不同。


12

是的,它将永远是相同的。从文档中

将指定的元素追加到此列表的末尾。参数:要添加到此列表的e元素返回:true(由Collection.add(java.lang.Object)指定)

ArrayList add()实现

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

-1

是的,它保持不变。但是为什么不轻易测试呢?创建一个ArrayList,填充它,然后检索元素!


19
那还没有证据。
YoTengoUnLCD '16

1
相同顺序只是测试的可能结果之一。如果实现是黑盒,则相同的顺序可能是特定情况。示例是排序列表。如果以适当的顺序将元素添加到排序列表中,则可以按排序的顺序来获取它们(这只是一种特殊情况),但是如果以随机顺序添加它们,则可以将它们排序。在不检查实现的情况下测试ArrayList只会声明“最有可能的顺序是相同的”。
simar
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.