【发布时间】:2010-10-28 10:38:12
【问题描述】:
假设我有一个已排序的 Java ArrayList。现在我想找到值 x 的索引。最快(没有超过 30 行代码)的方法是什么?使用 IndexOf() 方法?在一个简单的 for 循环中遍历所有值?使用一些很酷的算法?我们谈论的是 50 个整数键。
【问题讨论】:
标签: java algorithm search sorting
假设我有一个已排序的 Java ArrayList。现在我想找到值 x 的索引。最快(没有超过 30 行代码)的方法是什么?使用 IndexOf() 方法?在一个简单的 for 循环中遍历所有值?使用一些很酷的算法?我们谈论的是 50 个整数键。
【问题讨论】:
标签: java algorithm search sorting
tvanfosson 是对的,两者的时间都将非常短,因此除非此代码非常频繁地运行,否则不会有太大区别。
但是,Java 具有用于对列表(包括 ArrayLists)进行二进制搜索的内置功能,Collections.binarySearch。
【讨论】:
import java.util.ArrayList;
import java.util.Collections;
ArrayList myList = new ArrayList();
// ...fill with values
Collections.sort( myList );
int index = Collections.binarySearch( myList, "searchVal" );
编辑:未经测试的代码
【讨论】:
Binary search,但既然它只有 50 个项目,谁在乎(除非你必须这样做数百万次)?简单的线性搜索更简单,50 个项目的性能差异可以忽略不计。
编辑:您也可以使用内置的 java.util.Collections binarySearch 方法。请注意,即使未找到该项目,它也会返回一个插入点。您可能需要进行额外的检查,以确保该项目确实是您想要的。感谢@Matthew 的指点。
【讨论】:
如果密钥具有可接受的分布,考虑到执行时间,Interpolation Search 可能是非常快速的方法。
考虑到编码时间IndexOf() 是要走的路(如果适用于您的数据类型(我来自 C#,不懂 Java),则可以使用内置的二进制搜索)。
【讨论】: