我有一个大型列表(大约12,000个对象)的自定义对象,我必须在其中多次搜索特定的对象。截至目前,我主要使用蛮力来找到对象,但随着列表变大,它变得非常慢。这是我现在搜索的方式:
List<MyObject> objectsToSearch; //List containing about 12000 objects
MyObject objectToCompare = new MyObject("this is a parameter"); //Object to compare with list
for(MyObject compareFrom : objectsToSearch){
if(compareFrom.equals(objectToCompare)){
System.out.println("Object found");
}
}
当然必须有更好的方法来实现这一目标。提高性能变得尤为重要,因为我需要多次执行此操作。
尽管我的研究,我还没有找到任何详细的教程。我如何实现这一目标?
答案 0 :(得分:2)
让您的课程MyObject
实施Comparator
,然后使用 Collections.sort() 对列表进行排序,然后您可以应用 Collections.binarySearch() < /强>
答案 1 :(得分:2)
你确定你真的需要一个名单吗?您似乎只是检查对象的状态。如果您不需要保留对象的顺序,并且如果它只足以保留每个对象一次,请考虑使用Set,而非使用HashSet。
不要忘记为你存储的对象实现equals()和hashCode(),否则HashSet将无效。
答案 2 :(得分:0)
如果已正确实现自定义类的equals方法,则可以使用contains(Object o)方法。
if(objectsToSearch.contains(objectToCompare)){
System.out.println("Object found");