2012-12-18 36 views
2

我使用ArrayDeque创建了一个基本的库存系统,其中的东西被推入库存。ArrayDeque包含Object?

Couch couch1 = new Couch("I wouldn't sit on it.", 100, true); 
roomList[0].inventory.add(couch1); 

我正在运行检查以查看某个项目是否在像这样的房间中。

if (input.matches(".*look.*")) 
{ 
    if(input.matches(".*Couch.*")) 
    { 
     if(roomList[currentRoom].inventory.contains(???)) 
     { 
      //code to be executed. 
     } 
    } 
} 

我该把什么放进去?为了它检查库存ArrayDeque是否包含对象couch1?如果这是不可能的,是否有更好的方法来做到这一点?

+0

你为什么不把'couch1'放在那里? –

+0

你想检查集合中是否有某个对象,但是你不知道运行时该对象是什么? –

回答

0

功能是基于您的equals()的实施。默认情况下,你必须提供完全相同的对象(所以couch1)。如果你重写,你可以使自己的版本等于,例如通过比较所有的字段。一个非常有用的工具是Apache EqualsBuilder,这也解释了如何实现equals()函数。

不利的一面是你必须构建一个具有相同字段的沙发对象。如果这是不可能的,你可能会诉诸另一种数据类型,例如地图。然后,您可以通过基于沙发某些字段的唯一ID进行存储。

最后一种选择是不使用函数,而是根据其他一些选择标准使用自己的函数循环遍历Deque和过滤器。

相关问题