2015-04-15 54 views
2

我有一个list<MyObject>(java LinkedList)。每个对象都有一个键和一个值属性。存储vs处理时间

客户端1需要整个列表。

客户端2将在返回

客户端3传递一个键和期待值将传递值和预期回报的关键。

问题是,由于Java集合使用指向实际对象的指针而不是存储对象,因此值得存储两个以上的地图。

Map<key, MyObject>服务客户端2(java的HashMap

Map<value, MyObject>服务客户端3.(Java HashMap

这将节省处理涉及通过整个列表(list<MyObject>)迭代时间和寻找匹配键或值。

+1

你在说几十,几百或几千个'MyObject'实例吗? –

+0

除了史蒂夫所说的:**多少次**你会执行这个搜索,并在**哪个场景**?如果在将20 GB保存到磁盘之前保存1秒,或者每天用户打开一个表单时保存50 ms ...您可能不需要任何_optimization _...此外,您也可以考虑使用HashSet而不是LinkedList。 –

+0

数百个对象。这些对象是客户经常查询的一种主数据。 – Oliver

回答

0

考虑到可读性的好处,拥有这两个映射将使代码更容易,并且额外映射的内存开销可以忽略不计。你是对的,因为它们是对象,你不必复制内容,只需要数据结构。

如果存储键/值对没有MyObject在桌面上,您可以使用Guava BiMap并摆脱MyObject的原始列表和开销。这意味着客户端1迭代顺序并不重要。