我有一个直接缓冲液保持已排序的整数(即1,1,3,3,3,3,7,7,....)。大多数值将会出现多次。我想找到我寻找的价值观的第一个位置。如何在Java中高效搜索排序的巨大直接缓冲区?
- 是否有直接使用缓冲区 内置Java的搜索功能? (找不到任何东西)
- 如果没有,有没有提供这样的功能,任何像样的图书馆?
如果不是,有什么搜索算法会建议执行,因为:
- 我通常会有数以百万计的条目在我的缓冲
- 速度是非常重要的
- 它必须返回首次出现搜索号码
- 我宁愿不修改数据,因为之后我需要原始数据
编辑:感谢所有的海报暗示Arrays.binarySearch()
,但是,据我所知,直接缓冲区一般不具有支持数组。这就是为什么我正在寻找一个直接在缓冲区上工作的实现。
而且,可能会出现高达一千倍的每个值,因此找到一个着陆点之后的线性搜索可能不会是非常有效的。但dasblinkenlight的比较建议可能会起作用。
'Arrays.binarySearch'会诀窍吗?拥有数百万条记录,它应该在不到三十步的情况下为您提供答案。您可能需要提供自定义比较器来获取第一个位置,而不是最后一个位置。 – dasblinkenlight 2012-03-30 14:16:40
我会使用二进制搜索来查找一个数字,然后开始向左直线搜索,直到获得第一个出现的那个数字 – 2012-03-30 14:17:54
@dasblinkenlight只使用binarySearch将永远不会工作。因为这里的数字是重复的,提问者希望数字的第一次出现。 – 2012-03-30 14:18:40