从集合中获取对象而不在java中循环

sei*_*cle 4 java collections optimization

我需要反复(成千上万次)从Collection包含数十万个对象的元素中检索一个元素(每次不同).

执行此检索操作的最快方法是什么?目前我Collection是一个List,我迭代它直到我找到了元素,但是有更快的方法吗?用一个Map?我在想:

  • 将对象放在a中Map,键是Object的id字段,Object本身是值.
  • 然后做get(id)Map应该比循环通过一个快得多List.
  • 如果这是一种正确的方法,我应该使用HashMapTreeMap? - 我的对象没有特别的顺序.

任何有关此事的建议将不胜感激!

最后一点:如果外部库提供了一个工具来回答这个问题,我会很乐意接受它!

npi*_*nti 5

根据Tree Map(强调我自己)的文档:

地图根据其键的自然顺序进行排序,或者根据使用的构造函数在地图创建时提供的比较器进行排序.

在您的情况下,您声明项目没有特定的顺序,并且您似乎没有遵循任何特定的顺序,而是能够尽快检索数据.

HashMaps提供恒定的阅读时间,但不保证订单,所以我认为你应该采取HashMaps:

这个类不保证地图的顺序; 特别是,它不保证订单会随着时间的推移保持不变.假设散列函数在桶之间正确地分散元素,该实现为基本操作(get和put)提供了恒定时间性能.

作为旁注,这可以非常快地占用内存,因此查看数据库方法也许是一个好主意,并且可能使用类似缓存的机制来处理更常用的信息.