在Java中,在方法中创建LinkedList并返回其迭代器是安全的:
public Iterator<Integer> iterator()
{
LinkedList<Integer> list = new LinkedList<>();
list.add(1);
return list.iterator();
}
在方法返回后,列表是否有可能被垃圾收集?
答案 0 :(得分:2)
代码是安全的,从某种意义上讲,只要Iterator可以从任何活动线程访问它就无法完成,它将继续工作。
理论上,如果底层List是不可修改的,那么它的<p>{!! $recent->blog_content !!}</p>
实现可以创建自己的列表数据副本,而不是保留任何指向List的指针。在这种情况下,列表可能是垃圾收集。迭代器将继续工作。
在实践中,我所见过的所有iterator()
实现都明确地或通过作为内部类来保持对Collection的引用。只要可以访问迭代器,集合仍然可以访问。
答案 1 :(得分:1)
只要迭代器在周围,列表就不会被垃圾收集。
答案 2 :(得分:1)
在所有方面我都可以想到初始化迭代器,它会引用LinkedList,因此不会被垃圾回收。
答案 3 :(得分:1)
只要有一个指向列表的指针,它就不会受到垃圾收集的影响。
因此,如果您只是调用该方法,则没有指针:
iterator();
这里有一个指针,只要它持续存在,你就不必担心垃圾收集了:
Iterator<Integer> o = iterator();
答案 4 :(得分:0)
我假设您确实想要返回Iterable<Integer>
。这是一个列出工具的接口,Iterable基本上允许迭代列表。
public Iterable<Integer> iterator()
{
LinkedList<Integer> list = new LinkedList<>();
list.add(1);
return list;
}
这当然可以向下转换,但是Iterable接口会向用户暗示这是一个坏主意。它还需要用户方面的一些工作才能知道这是一个LinkedList而不是其他一些实现相同接口的类。