我想了解.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();
}
答案 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()
和其他功能。