java中的内存数据库算法/设计/逻辑

java中的内存数据库算法/设计/逻辑,java,database-design,indexing,Java,Database Design,Indexing,问题陈述如下,应该用java完成 我有Person类的集合、数组列表,即 List lisOfPersons=new ArrayList(); 人在哪里, 公共类人物{ 智力年龄; 字符串名; //构造函数和setter与getter } 现在,我想使用它作为缓存,并围绕这个集合创建一个lib或wrapper实用程序。此实用程序应该具有/提供/公开三种方法/APIfindByName,findByAge,findByAgeAndName 每次迭代集合都是无效的。我希望在HashMap或堆或树

问题陈述如下,应该用java完成

我有
Person
类的集合、数组列表,即

List lisOfPersons=new ArrayList();
人在哪里,

公共类人物{
智力年龄;
字符串名;
//构造函数和setter与getter
}
现在,我想使用它作为缓存,并围绕这个集合创建一个lib或wrapper实用程序。此实用程序应该具有/提供/公开三种方法/API
findByName
findByAge
findByAgeAndName

每次迭代集合都是无效的。我希望在
HashMap
或堆或树中对数据进行索引和重新排列。但在这里,我需要为每个方法至少创建三个索引。其他选项,这就是您在这里的原因

您可以使用
地图
地图
进行快速搜索

请记住,对象不会复制到地图中,您只使用引用,因此没有太多内存开销

对于AgeAndName搜索,一旦从这两个映射中获得结果,就可以使用
Collection.retainal()
函数。请记住克隆集合,因为“保留”可以在适当的位置工作

  Set<Person> unique = new Set<Person> ( mapName.get("name") );
  unique.retainAll( mapAge.get(11) );
  return unique;
Set unique=新集合(mapName.get(“name”);
unique.retainal(mapAge.get(11));
返回唯一值;

地图
会更好;-)这也是我解决这个问题的方法。谢谢,。。。使用map作为索引和retainAll可以,。。。到目前为止,这似乎是最有名的方法……要么你想要索引搜索,要么你不想要。您可以通过按名称和年龄创建嵌套索引,将其减少为两个索引。您是否确实对您的搜索进行了基准测试,并确定其速度太慢,例如,您知道您将拥有多少条条目,暴力搜索所需时间的上限以及所需时间,还是您只是假设它会是这样?@PeterLawrey总的说来不错,但在这种情况下,简单地使用地图在速度和编码时间上都是一个更快的解决方案。@Dariusz我同意,除非在任何情况下它都是一个多地图,因为看起来可能有多个相同年龄或姓名的人。