Java:在大型列表中搜索对象

时间:2016-04-24 17:23:34

标签: java

我有一个大型列表(大约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");
    }
}

当然必须有更好的方法来实现这一目标。提高性能变得尤为重要,因为我需要多次执行此操作。

尽管我的研究,我还没有找到任何详细的教程。我如何实现这一目标?

3 个答案:

答案 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");