Java List size()性能和提示

时间:2014-06-24 17:20:41

标签: java performance list

我想了解.size()方法的效果。此方法是否从列表中的对象数返回引用(类似于每次将对象添加到列表时递增的类成员)?或者它是否遍历所有对象?

哪一个更有效率?

每次都致电.size()

List<Vector3> objects = getCoords();

for (int x = 0; x < objects.size(); x++){
   for (int y = 0; y < objects.size(); y++){
      for (int z = 0; z < objects.size(); z++){
         drawShape(x, y, z);
      }
   }
}

或者保存到本地变量:

List<Vector3> objects = getCoords();
int size = objects.size();

for (int x = 0; x < size; x++){
   for (int y = 0; y < size; y++){
      for (int z = 0; z < size; z++){
         drawShape(x, y, z);
      }
   }
}

我们假设我们有&gt;列表中有30.000 个对象。

哪一个更快/更有效?

如果我们使用ArrayList<T>List<T>

,这是否重要?

简单陈述怎么样:.size().isEmpty()

if (objects != null && objects.size() > 0){
   doThis();
}

或致电.isEmpty()

if (objects != null && !objects.isEmpty()){
   doSomethingElse();
}

1 个答案:

答案 0 :(得分:3)

Java List使用实例变量来处理大小。它在您添加时递增,在您减少时递减。调用list.size()会返回一个变量,因此是O(1)。

List.size()(理论上)会看起来像:

public int size() {
    return this.size;
}

调用List.isEmpty()是对实例变量size是否等于0的布尔检查。

public boolean isEmpty() {
    return (this.size==0);
}

由于这是一个实例变量,所以(根据我所知)您使用的List类型并不重要(因为所有类型都继承了一般接口并具有所需的add()和其他功能。