我有一个字符串数组列表,字符串按排序顺序排列,我想找到特定元素的索引,哪种方法更快?
- 在列表中执行indexOf()。
- 在等效数组中执行二进制搜索?
我有一个字符串数组列表,字符串按排序顺序排列,我想找到特定元素的索引,哪种方法更快?
您可以直接使用Collections.binarySearch
来提高效率:
public static <T> int binarySearch(List<? extends Comparable<? super T>> list,
T key)
如前所述,二分查找由于其O(log n)的时间复杂度而更好。
另一个好处是Collection.binarySearch(...)返回应插入元素的位置。因此,如果您要进行插入操作,这是另一个优点。以下是其工作原理:
int x = Collection.binarySearch(list, element);
if(x > 0)
System.out.println("it exists");
else
list.add(element, -x-1);
我不知道你是否需要这个,但我喜欢它 :)
e
/ \
c g
/ \ / \
b d f h
/ \
a i
因此,根据您要搜索的字符串不同,您需要不同数量的尝试才能找到正确的字符串。随着算法从顶部向下工作,并比较要搜索的字符串是大于还是小于正在测试的字符串,然后检查左侧(较小)或右侧(较大)的字符串。
但是,如果您沿着行自己往下走,并且您没有搜索已排序列表开头的内容,则搜索将需要更长时间。