2
我在一类下面的代码:Java是否在每次调用时都创建一个iterator()的新实例?
private HashMap<Long, Item> items;
private Iterator<Item> iterator;
@Override
public Iterator<Item> iterator()
{
iterator = items.values().iterator();
return iterator;
}
我想知道这是否会导致迭代器的新实例每次被返回,即如果从这个方法得到两个迭代器将返回引用同一个对象。
此外,在这段代码中是否还有其他明显的差异?
你是什么意思“可见差异”? – Philipp
如果程序有多个线程,理论上可以在不同的调用之间返回相同的迭代器。正如接受的答案指出的那样,这将是不好的。 – Radiodef
当我调用'iterator()'''Collections.empty ...()''时,返回的是那些总是返回完全相同的实例的唯一集合。这与你的情况无关,因为'items'是一个'HashMap',但如果它是一个普通的'Map',这个角落案例可能已经应用了。 –