Java List size()性能和提示

Java List size()性能和提示,java,performance,list,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 <

我想知道
.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);
      }
   }
}
或者通过调用
.isEmpty()


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()
和其他函数。

类成员,如果内存可用的话。您可以通过挖掘各种实现的源代码来找到答案,但我真的怀疑是否会采用迭代方法。性能损失太大,无法保证节省4字节内存。如果大小不变,您的两个循环可以是等价的,我认为在这种情况下,JITC可以将一个循环转换为另一个循环。无论是使用
ArrayList
还是
List
都是一个灵活性问题。最后,选择实际的实现
size()
isEmpty()
解决不同的问题。
getCoords()返回什么类型的
List
?这可能无关紧要,但值得注意的是,
List
仅仅是一个接口,因此它的实现可能会有不同的表现。无需“挖掘”。查看源代码。至于ArrayList vs List:一个是接口。将一个界面保留在作业左侧有其优点(更多的是在这里的某个地方),这取决于
List
界面的实现。我认为所有标准
List
都会存储大小,但可以想象,用户制作的界面不会存储大小。说实例变量而不是类变量就不那么模棱两可了。第二个变量通常指静态成员变量。@keyser很好,我的答案已经编辑好了。Java
List
不使用任何实例变量,因为它是一个接口,而不是一个类。
if (objects != null && !objects.isEmpty()){
   doSomethingElse();
}
public int size() {
    return this.size;
}
public boolean isEmpty() {
    return (this.size==0);
}