Java List size()性能和提示

Zba*_*ian 6 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);
      }
   }
}
Run Code Online (Sandbox Code Playgroud)

或者通过保存到本地变量:

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);
      }
   }
}
Run Code Online (Sandbox Code Playgroud)

我们假设列表中有> 30.000个对象.

哪一个更快/更有效?

如果我们使用ArrayList<T>或者是否重要List<T>

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

if (objects != null && objects.size() > 0){
   doThis();
}
Run Code Online (Sandbox Code Playgroud)

或者通过电话 .isEmpty()

if (objects != null && !objects.isEmpty()){
   doSomethingElse();
}
Run Code Online (Sandbox Code Playgroud)

Mik*_*son 3

JavaList使用实例变量来处理大小。当你增加时它会增加,当你减少时它会减少。调用list.size()返回一个变量,因此时间复杂度为 O(1)。

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

public int size() {
    return this.size;
}
Run Code Online (Sandbox Code Playgroud)

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

public boolean isEmpty() {
    return (this.size==0);
}
Run Code Online (Sandbox Code Playgroud)

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