【问题标题】:ArrayList insertion and retrieval orderArrayList 插入和检索顺序
【发布时间】:2012-07-05 02:32:02
【问题描述】:

假设我在 ArrayList 中插入 5 个字符串。从ArrayList 插入和检索的顺序会一样吗?

【问题讨论】:

  • 尝试一次是一回事。确保每次都相同是另一回事。

标签: java collections


【解决方案1】:

是的。 ArrayList 是一个顺序列表。所以,插入和检索顺序是一样的。

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

【讨论】:

  • 如果 OP 在末尾“插入”,也称为添加。
  • 第二个语句表示如果在一个线程检索期间另一个线程干预以添加新元素。那么订单不会保持不变
【解决方案2】:

如果您总是添加到末尾,那么每个元素都将添加到末尾并保持这种状态,直到您更改它为止。

如果你总是在开头插入,那么每个元素将按照你添加它们的相反顺序出现。

如果你把它们插在中间,顺序就会是别的东西。

【讨论】:

    【解决方案3】:

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

    【讨论】:

    • 不过这不是证据。
    • 相同的顺序只是可能的测试结果之一。如果实现是黑盒,则相同的顺序可能是特定情况。示例是排序列表。如果您以正确的顺序将元素添加到排序列表中,则可以按排序顺序(这只是一种特殊情况),但如果您以随机顺序添加它们,则可以使它们有序。在不检查实现的情况下测试 ArrayList 只会声明“很可能顺序相同”。
    【解决方案4】:

    是的,ArrayList 是一个有序集合,它维护了插入顺序。

    检查下面的代码并运行它:

    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)

    【讨论】:

    • +1 用于包含指向 Java 文档的链接,清楚地解释了排序。
    • 示例输出会很有用
    • 很好的例子。为此 +1。
    • 一个例子不是证明,但链接是
    【解决方案5】:

    是的,它永远都是一样的。来自documentation

    将指定元素附加到此列表的末尾。参数: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;
    }
    

    【讨论】:

      猜你喜欢
      • 2011-01-09
      • 2019-03-29
      • 2011-02-12
      • 2021-04-18
      • 2013-11-01
      • 2016-02-29
      • 2016-12-01
      • 2011-11-02
      • 1970-01-01
      相关资源
      最近更新 更多