Java:在两个ArrayList中查找匹配对象值的最有效方法?
我有两个对象数组列表:Java:在两个ArrayList中查找匹配对象值的最有效方法?,java,loops,arraylist,match,Java,Loops,Arraylist,Match,我有两个对象数组列表:modelList包含Model对象,以及entityList包含Entity对象。Model和Entity对象都有一个名为id的属性 我的目标是在模型列表中遍历每个模型,如果实体列表中有一个实体具有相同的id值,则调用方法merge() 目前,我正在这样做: for (Model model : modelList) { for (Entity entity : entityList) { if (model.getId().equals(enti
modelList
包含Model
对象,以及entityList
包含Entity
对象。Model
和Entity
对象都有一个名为id
的属性
我的目标是在模型列表
中遍历每个模型
,如果实体列表
中有一个实体
具有相同的id
值,则调用方法merge()
目前,我正在这样做:
for (Model model : modelList) {
for (Entity entity : entityList) {
if (model.getId().equals(entity.getId())) merge(entity, model);
}
}
这似乎不是很有效,尤其是对于大型数据集。实现预期结果的更好方法是什么
提前谢谢 对将id
映射到实体的实体
对象使用映射
也许您可以更改生成列表的代码,以返回映射
也许您可以构建模型的映射模型并在其中进行搜索
for(Entity entity: entityList) {
Model model = models.get(entity.getId());
if (model != null) {
merge(entity, model);
}
}
如果您的模型比实体少得多,则此项工作将正常进行 根据勒内的回答,我同意这一点:
Map<String, Model> modelMap = new HashMap<String, Model>();
for (Model model : modelList)
if (!modelMap.containsKey(model.getKey())) modelMap.put(model.getKey(), model);
Iterator it = entityList.iterator();
while (it.hasNext()) {
Entity entity = (Entity) it.next();
String key = entity.getKey();
if (modelMap.containsKey(key)) merge(entity, modelMap.get(key));
else it.remove();
}
Map modelMap=newhashmap();
对于(模型:模型列表)
如果(!modelMap.containsKey(model.getKey()))modelMap.put(model.getKey(),model);
迭代器it=entityList.Iterator();
while(it.hasNext()){
实体=(实体)it.next();
String key=entity.getKey();
if(modelMap.containsKey(key))合并(entity,modelMap.get(key));
否则,删除();
}
仍然欢迎改进答案…正如Rene所回答的,哈希通常比遍历列表更快。list1.retainAll(List2)应该可以帮您完成。谢谢。retainAll()方法在这种情况下不起作用,因为Model和Entity是两个不同的对象类。谢谢。在这种情况下,entity.getId()不会返回一个用作modelList.get()参数的值。我认为这让我走上了正确的道路。。。