我想在对象的ArrayList上实现快速搜索。这些对象包括int oldId,int newId和int inList等。
现在,我尝试使用列表上的Collections.binarySearch实现二进制搜索,但是问题是我需要使用oldId和inList进行搜索,以从相应的对象获取newId。示例:我有oldId = 9和inList = 1,并尝试获取已在其他位置分配的newId。本质上映射了oldId-newId并将其分组。可能有重复的oldId,但是它们必须在不同的列表中,并且具有唯一的newId。
您认为对这些地图对象使用哈希图会更好吗?否则,是否有解决方案(可能是对象的比较器)从oldId和inList信息中获取newId。我也在寻找一种快速搜索算法。
非常感谢您的帮助,我感谢您的想法。
这是我为二进制搜索编写的比较器,但是我不知道如何在此处添加inList信息。public class CompareTermId implements Comparator
<MObj>
{
public CompareTermId(){}
public int compare(MObj a, MObj b){
if(a.oldTermId < b.oldTermId) return 1;
else if(a.oldTermId > b.oldTermId) return -1;
else return 0;
}
}
最佳答案
正如您邀请的那样,我将推荐HashMap :)
原因是因为HashMap有效地为单个键提供了恒定的时间查找。
如果您按以下方式构造哈希图:
Map<Id, Map<InList, Id>> oldIdToNewIdMap = new HashMap<>();
然后填充它:
Map<InList, Id> inListMap = new HashMap<>();
inListMap.put(oldId, newId);
oldIdToNewIdMap.put(inList, inListMap);
然后,您可以如下查找:
Id newId = oldIdToNewIdMap.get(inList).get(oldId);