Java 集合 binarySearch() 方法

2025年3月21日 | 阅读 4 分钟

binarySearch() 是 Java 集合类的一个内置方法,用于返回对象在排序列表中的位置。Java 集合的 binarySearch() 方法有两种不同的类型,可以通过其参数进行区分。

它们是

  1. Java Collections binarySearch(List<? extends Comparable<? super T>> list, T key)
  2. Java Collections binarySearch(List<? extends T> list, T key, Comparator<? super T> c)

Java Collections binarySearch(List<? extends Comparable<? super T>> list, T key)

此方法使用二分搜索算法来搜索提供的列表中指定的对象。在调用方法之前,列表必须按照指定的自然顺序升序排序。如果列表未排序,则结果未定义。

Java Collections binarySearch(List<? extends T> list, T key, Comparator<? super T> c)

此方法使用二分搜索算法来搜索提供的列表中指定的对象。在调用方法之前,列表必须按照指定的比较器升序排序。

语法

以下是 binarySearch() 方法的声明:

参数

参数描述必需/可选
list由用户指定要搜索的内容。必需
要搜索的键,在提供的列表中进行查找。必需
c用于排序列表的比较器。必需

返回值

方法返回值
binarySearch(List<? extends Comparable<? super T>> list, T key)它返回键在升序排序列表中的索引。
binarySearch(List<? extends T> list, T key, Comparator<? super T> c)它返回键在由比较器 c 定义顺序的排序列表中的索引。

异常

ClassCastException - 如果列表中的元素不可相互比较,或者搜索键与列表中的元素不可相互比较,则会抛出此异常。

兼容版本

Java 1.5 及以上版本

示例 1

输出

index 'D' is available at position: 3

示例 2

输出

Provided List are: [10, -20, 30, -40, 50]
Index '-20' is available at position: -4

示例 3

输出

Provided List are: [10, -20, 30]
Enter the search key: D
Exception in thread "main" java.lang.ClassCastException: java.base/java.lang.Integer cannot be cast to java.base/java.lang.String
	at java.base/java.lang.String.compareTo(String.java:124)
	at java.base/java.util.Collections$ReverseComparator.compare(Collections.java:5140)
	at java.base/java.util.Collections$ReverseComparator.compare(Collections.java:5131)
	at java.base/java.util.Collections.indexedBinarySearch(Collections.java:333)
	at java.base/java.util.Collections.binarySearch(Collections.java:321)
	at myPackage.CollectionBinarySearchExample3.main(CollectionBinarySearchExample3.java:16)

示例 4

输出

4 is available at index: 3

示例 5

输出

Available at index: 0
Found at index: -1