2012-01-31 100 views
0

我试图在迷宫中查找房间的散列图,并将外部房间添加到向量中。房间不断增加多次,任何人都可以帮我弄清楚为什么?Java:向多个时间向多个向量添加元素到向量从HashMap向我添加元素

public void fillOuterRoomVector() 
{ 
    //initialize the vector 
    outerRooms = new Vector<Room>(); 

    //for each one 
    for(Entry<String, Room> e : mazeRooms.entrySet()) 
    { 
     //if it is outer 
     if (e.getValue().isThisAnOuterRoom()==true) 
     { 
      //add it 
      outerRooms.add(e.getValue()); 
     } 
    } 
} 

编辑:我在变量检查查看在Eclipse中,而我调试,房间真的只出现一次mazeRooms而且不止一次在outerRooms

编辑:Screenshot from debug screen

+0

'mazeRooms'如何填充?它是否可以包含具有不同密钥的重复“房间”? – 2012-01-31 15:51:43

+0

可能是一个Instace of Room会在Map中多次存在?这可以解释它。你不检查Room实例的uniqness。 – breezee 2012-01-31 15:51:51

+0

这是带有字符串键的房间的散列图,每个房间只出现一次 – BIU 2012-01-31 15:52:27

回答

0

如果同房被多次添加到outerRooms(),这意味着它不止一次出现在mazeRooms(使用不同的密钥)。

+0

我在Eclipse中检查了Variables视图,而我调试时,房间只在mazeRoom中出现一次,在outerRooms中只出现一次 – BIU 2012-01-31 15:53:36

+1

@BIU:尊重,这似乎不太可能。事情有时不是他们看起来的样子。你能否提供一个我们可以运行的完整示例并证明这种行为? – NPE 2012-01-31 15:55:25

+0

谢谢...该程序使用了很多不同的文件,但我不知道我该怎么做。我可以发送调试屏幕的屏幕截图来向你展示我的意思吗? – BIU 2012-01-31 15:58:08

1

在不知道数据的情况下,我的猜测是mazeRooms与多个键具有相同的值。如果您的需要是收集非重复数据,我建议使用Set而不是Vector

0

您可以使用HashSet而不是Vector来确保每个房间只记录一次。