我正在创建一个游戏应用程序,您可以爬上“星星”。
我希望我的矢量对象能够抓住最顶级的“星星”。
所以我的grapTopMostStars方法为它使用的矢量对象调用.clear()然后抓住最顶端的星。
然而,我的好朋友告诉我,为什么不宣布新的Vector对象,因为我并不真正关心我Vector中的前一个星星。
他听起来很有效,但我担心因为我在移动设备上制作这个游戏,不知何故多次创建新实例会减慢我的应用程序。
答案 0 :(得分:4)
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的成员 馆藏框架。与新的集合实现不同, 矢量是同步的。如果不需要线程安全的实现, 建议使用ArrayList代替Vector。
(线程安全的东西比非同步的非线程安全的类慢。)