我正在创建一个游戏应用程序,您可以在其中爬上“星星”。
我希望我的矢量对象保持在最上面的“星星”上。
所以我的 grapTopMostStars 方法为它使用的矢量对象调用 .clear() ,然后抓住最上面的星星。
然而,我的好朋友告诉我,为什么不直接声明新的 Vector 对象,因为我并不关心 Vector 中以前的星星。
他听起来很有道理,但我很担心,因为我在移动设备上制作这款游戏,以某种方式多次创建新实例会减慢我的应用程序。
clear
内部调用removeAllElements
,实现如下:
651 public synchronized void removeAllElements() {
652 modCount++;
653 // Let gc do its work
654 for (int i = 0; i < elementCount; i++)
655 elementData[i] = null;
656
657 elementCount = 0;
658 }
迭代向量以将每个条目设置null
为绝对比创建新向量的开销更大。
顺便说一句,如果可能的话,你应该用Vector
一个替换你的ArrayList
。Javadoc告诉我们:
从 Java 2 平台 v1.2 开始,该类被改进为实现 List 接口,使其成为 Java Collections Framework 的成员。与新的集合实现不同,Vector 是同步的。如果不需要线程安全实现,建议使用 ArrayList 代替 Vector。
(线程安全的东西比不同步的非线程安全类慢。)