Java二进制搜索在大型抽象列表上



简短版本:

我有nLinkedList随机Integer s按顺序排列。
如果我在该列表上使用Collections.binarySearch,则适用于我尝试过的任何n
但是,当我用AbstractList包装LinkedList时,对于n>10000,二进制搜索开始非常奇怪。
它没有运行适当的二进制搜索,而只是在整个列表上进行迭代。


长版:

我有一个"file",其中包含升序顺序的随机数,其中每行都容纳一个数字。
我想二进制搜索"file"并找到给定数字的索引(或"line number"(。

一个微不足道的解决方案是读取整个文件并将每个数字放在LinkedList中,然后在该LinkedList上使用Collections.binarySearch

现在,可以说我的信息说从"file"阅读一行是一个昂贵的操作。

我尝试做的事情,以最大程度地减少我必须阅读"file"的时间,就是"模拟"该LinkedList,并使用AbstractList,每次我在该AbstractList中使用get(int index)时,我都会从"file"读取index

当我的AbstractList大小为<1000时,这似乎很好,当我尝试更大的列表时,二进制搜索似乎停止工作,并且只是在所有AbstractList上迭代(从第一个节点到最后一个节点(。/p>


我似乎已经将问题缩小到了使用二进制搜索的大型抽象列表。我不确定为什么会发生这种情况,并且会喜欢一些帮助。

我包括了"长版本"。如果有人可以建议另一种解决方案。

谢谢!

javadoc进行救援:

[binarySearch]在"随机访问"列表的日志时间(n(时间(提供近固定时间的位置访问(中运行。如果指定的列表未实现RandomAccess接口并且很大,则此方法将进行基于迭代的二进制搜索,该搜索执行O(n(链接遍历和O(log n(元素比较。

LinkedListAbstractList不要实现RandomAccess