Collections.binarySearch需在有序列表上使用,基于二分查找实现,时间复杂度O(log n);使用前必须确保列表已排序,否则结果不可预测;对自定义对象搜索时,排序与查找需采用相同比较逻辑(Comparable或Comparator);返回值≥0表示元素索引,负数表示未找到,插入位置为-(返回值)-1;例如先排序List<Integer> numbers = Arrays.asList(10, 30, 15, 5, 25); Collections.sort(numbers); 再调用binarySearch得索引2;Person类按姓名排序后搜索Bob返回对应索引。

在Java中,Collections.binarySearch 是一个非常实用的工具方法,用于在已排序的列表中快速查找指定元素的位置。它基于二分查找算法,时间复杂度为 O(log n),比线性搜索更高效。但使用时必须注意前提条件:集合必须是有序的,否则结果不可预测。
调用 binarySearch 之前,必须保证列表中的元素已经按升序排列。如果列表未排序,需要先调用 Collections.sort() 进行排序。
示例代码:
List<Integer> numbers = new ArrayList<>(Arrays.asList(10, 30, 15, 5, 25));
Collections.sort(numbers); // 必须先排序
int index = Collections.binarySearch(numbers, 15);
System.out.println("元素15的位置: " + index); // 输出 2
当列表中存储的是自定义对象时,可以通过实现 Comparable 接口或传入 Comparator 来支持比较操作。
立即学习“Java免费学习笔记(深入)”;
示例:按姓名排序的 Person 对象搜索
class Person {
String name;
Person(String name) { this.name = name; }
String getName() { return name; }
}
<p>List<Person> people = Arrays.asList(
new Person("Alice"),
new Person("Bob"),
new Person("Charlie")
);</p><p>// 按 name 排序
people.sort((p1, p2) -> p1.getName().compareTo(p2.getName()));</p><p>// 使用相同 comparator 搜索
int idx = Collections.binarySearch(people, new Person("Bob"),
(p1, p2) -> p1.getName().compareTo(p2.getName()));
System.out.println("Bob 的位置: " + idx);</p>binarySearch 返回值有明确意义:
这个特性可用于判断元素是否存在,并在需要时自动维护有序列表。
基本上就这些。只要记住排序是前提,比较逻辑要一致,就能正确使用 binarySearch 提升查找效率。
以上就是在Java中如何使用Collections.binarySearch搜索集合元素_Collections集合操作技巧的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号