问题陈述如下,假设在java中完成,
我有Person
类的集合,arrayList,即
List<Person> lisOfPersons = new ArrayList<Person>();
人在哪里,
public class Person{
int age;
String name;
//constuctor and setters and getters
}
现在,我想将它用作我的缓存,并围绕此集合创建一个lib或包装器实用程序。该实用程序应该具有/提供/公开三种方法/ API findByName
,findByAge
,findByAgeAndName
。
每次迭代收集都是不可能的。我希望像{/ 1}}或堆或树中的索引和重新排列数据一样。但是在这里我需要至少为每个方法创建三个索引。其他选择,这就是你在这里的原因
答案 0 :(得分:2)
您可以使用Map<Integer, List<Person>>
和Map<String, List<Person>>
进行快速搜索。
请记住,对象不会被复制到地图中,您只使用引用,因此没有很多内存开销。
对于AgeAndName搜索,一旦从这两个地图获得结果,您就可以使用Collection.retainAll()
功能。请记住克隆集合,因为retain可以就地工作。
Set<Person> unique = new Set<Person> ( mapName.get("name") );
unique.retainAll( mapAge.get(11) );
return unique;