【问题标题】:ArrayList.indexOf versus sequential searching of an array of objectsArrayList.indexOf 与对象数组的顺序搜索
【发布时间】:2013-05-09 12:18:56
【问题描述】:

JVM 运行对象的 array 是否比对象的 ArrayList 快?

详细来说,假设我有两个变量

Object theObject = someObject; 
Object[] objArr;
ArrayList objArrList;

假设 objArr 和 objArrList 具有相同的元素,将迭代 objArray 的元素,直到我发现感兴趣的元素与使用 objArrList.indexOf(...) 所花费的时间相同

即这是:

int length = objArray.length;
for(int i=0; i<length; i++){ 
   if(objArray[i].equals(someObject)){
      idx = i; break;
   }
}

基本一样

objArrList.indexOf(theObject);

ArrayLists(和一般的Lists)是否具有比简单的-go-through-each-element-in-sequence 方法更好的优化搜索?

谢谢!

【问题讨论】:

  • Arraylist 没有强制排序(并且不将元素存储在哈希表中),因此几乎可以肯定它对indexOf 进行了简单的线性搜索。测量并查看速度是否大致相似! (或搜索ArrayList 来源。)
  • 还要注意 ArrayList 实际上只是一个 Array 的包装器。

标签: java arrays search arraylist


【解决方案1】:

下面复制ArrayList.indexOf(Object o)的实现

public int indexOf(Object o) {
    if (o == null) {
        for (int i = 0; i < size; i++)
            if (elementData[i]==null)
                return i;
    } else {
        for (int i = 0; i < size; i++)
            if (o.equals(elementData[i]))
                return i;
    }
    return -1;
}

它的作用与您在数组上所做的完全相同。 (对 null 有一些不同的检查)。

因此 JVM 将在相同的时间内运行两者。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-05
    • 2021-01-20
    相关资源
    最近更新 更多