2015-01-01 66 views
2

我在一类下面的代码:Java是否在每次调用时都创建一个iterator()的新实例?

private HashMap<Long, Item> items; 
private Iterator<Item> iterator; 

@Override 
public Iterator<Item> iterator() 
{ 
    iterator = items.values().iterator(); 
    return iterator; 
} 

我想知道这是否会导致迭代器的新实例每次被返回,即如果从这个方法得到两个迭代器将返回引用同一个对象。

此外,在这段代码中是否还有其他明显的差异?

+1

你是什么意思“可见差异”? – Philipp

+2

如果程序有多个线程,理论上可以在不同的调用之间返回相同的迭代器。正如接受的答案指出的那样,这将是不好的。 – Radiodef

+1

当我调用'iterator()'''Collections.empty ...()''时,返回的是那些总是返回完全相同的实例的唯一集合。这与你的情况无关,因为'items'是一个'HashMap',但如果它是一个普通的'Map',这个角落案例可能已经应用了。 –

回答

5

每次您在标准集合上调用iterator()时,都会创建一个新的Iterator。否则就不可能有多个迭代器指向同一个集合的不同元素。

您将获得的迭代器指定给成员变量,因此每次调用iterator()方法时,private Iterator<Item> iterator都将被重置。我不确定你为什么要创建并返回一个迭代器,并将该迭代器存储在一个私有变量中,但你肯定有你的理由......

相关问题