Java中的clear()方法

Java中的clear()方法,java,collections,Java,Collections,Java中的许多容器类型数据结构都带有clear()方法。例如,我们可以对向量调用clear(),我们希望清除向量中的所有内容。我的问题是,在应用clear()方法之后,向量中的内容是被清空了还是仍然被引用?谢谢。它们不再被集合引用,但是如果您的代码中有任何引用,该引用将继续存在 如上所述,Vector的源确实调用: // Let gc do its work for (int i = 0; i < elementCount; i++) elementData[i] = null;

Java中的许多容器类型数据结构都带有
clear()
方法。例如,我们可以对
向量调用
clear()
,我们希望清除
向量中的所有内容。我的问题是,在应用
clear()
方法之后,向量中的内容是被清空了还是仍然被引用?谢谢。

它们不再被集合引用,但是如果您的代码中有任何引用,该引用将继续存在

如上所述,Vector的源确实调用:

// Let gc do its work
for (int i = 0; i < elementCount; i++)
    elementData[i] = null;
//让gc完成它的工作
for(int i=0;i

但是,这将其内部引用设置为null(按值传递),并且不会影响任何外部引用。

如果不从其他地方引用,它们将被垃圾收集。

//让gc完成其工作
//Let gc do its work
for (int i = 0; i < elementCount; i++) 
    elementData[i] = null;
for(int i=0;i

这是代码,带有Vector类的注释。我认为,它回答了这个问题。

它们没有被空掉——这毫无意义,只有引用变为空,而不是值——,它们只是被取消引用。如果他们没有任何其他引用(例如,另一个类将其作为静态或实例变量引用),那么他们将有资格使用GC。

如果有疑问,您可以查看源代码-它与JDK捆绑在一起(通常在名为
rt.zip
的文件中)

public void clear(){
移除所有元素();
}
公共同步的void removelements(){
modCount++;
//让gc完成它的工作
for(int i=0;i

“让gc完成它的工作”的评论来自实际的来源,而不是我的。

附带问题:那么多人是怎么听说Vector类的?它从未停止让我惊讶——毕竟,至少在过去的十年里,它一直被贬损为有利于ArrayList!我在java中学习了向量类,因为我在学习java之前就知道并使用了C++中的向量。Kevin Bourrillion:有些人听说过它,因为它在实现时是线程安全的,ArrayList肯定不是。显然,您可以包装在同步对象中,但对于基本数据结构…哦,呵呵。如果您有实际的并发访问,通常最好还是使用队列或CopyOnWriteArrayList。Vector没有什么值得推荐的。我想这只是一个拥有预期名称的问题。“Vector”听起来比“ArrayList”酷多了。这是对实现的最好描述——事实上,集合一开始就没有“对象”;它“引用”了这些对象。请在您的答案中添加一个简短的描述,说明您更改了什么/如何解决问题。仅代码的答案质量低,可能会被删除。每一个答案都需要至少一句或两句话来说明作者希望代码片段做什么,以及它做什么的高级直觉。
while(!stack.isEmpty()){
    System.out.println(stack.pop());
    System.out.println(stack);
}
while(!stack.isEmpty()){
    System.out.println(stack.pop());
    System.out.println(stack);
}