还有什么比从端到端迭代ArrayList更快的东西?

Sop*_*ner 3 java arraylist deque

使用此Java代码:

    // create the items list
    List<Item> items = new ArrayList<Item>();
    // ... (add some elements into the list so that it is not empty)

    // iterating ArrayList<Item> from right to left we find the position
    // based on the `if` condition satisfied for an item property
    int pos = 0;
    for (int j = items.size() - 1; j >= 0; j--) {
        Item item = items.get(j);
        if (item.property <= 7) {
            pos = j + 1; break;
        }
    }

    // add new item on the found above position
    Item it = new Item();
    if (pos == items.size()) {
        items.add(it);
    } else {
        items.add(pos, it);
    }
Run Code Online (Sandbox Code Playgroud)

如果Item item = items.get(j);由于ArrayList使用过这个声明需要一些额外的时间来执行,我很沮丧.例如,假设我们需要将新项添加到最后,然后通过调用get()项列表将仅从左侧迭代它,这是多余的.我希望使用Deque结构代替ArrayList.

您可以推荐什么,也许我完全错了,因为新元素也可以在开头添加,但目标是从右侧向左侧迭代.

Pet*_*hev 9

Get在ArrayList中以恒定时间运行.证明:javadoc.

size,isEmpty,get,set,iterator和listIterator操作以恒定时间运行.

所以不要担心get性能.这ArrayList不是链表.我认为它是由普通的java数组支持的.

  • [它实际上由一个数组备份.](http://www.docjar.com/html/api/java/util/ArrayList.java.html) (2认同)