java API------Arrays类binarySearch方法

本文详细解析了 Java 中 Arrays 类的 binarySearch 方法使用方法及其返回值特点,通过具体示例说明了如何处理查找存在与不存在的情况。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

//摘自ocjp:
import java.util.*;
public class Quest {
public static void main(String[] args) {
String[] colors = {"blue", "red", "green", "yellow", "orange"};
Arrays.sort(colors);
int s2 = Arrays.binarySearch(colors, "orange");
int s3 = Arrays.binarySearch(colors, "violet");
System.out.println(s2 + " " + s3);
}
}
What is the result?
A. 2 -1
B. 2 -4
C. 2 -5
D. 3 -1
E. 3 -4
F. 3 -5
G. Compilation fails.
H. An exception is thrown at runtime.
Answer: C
分析:

Arrays.binarySearch用法:若查找到,则返回key的位置;若未找到,则反回“-插入点”。(例中s3,若向colors中插入“violet”则下标为5)。




### Java APIArrays 的常用方法 以下是 `Arrays` 的一些常见方法及其功能描述: #### 数组转换为字符串表示形式 可以通过 `toString()` 方法将数组的内容转化为字符串形式以便于打印和调试。该方法适用于各种数据型的数组。 ```java int[] arr = {1, 2, 3}; System.out.println(Arrays.toString(arr)); // 输出 "[1, 2, 3]" ``` 此操作简化了数组内容的查看过程[^3]。 #### 对数组进行排序 `sort()` 是用于对数组元素按升序排列的一个重要方法。它支持多种数据型,包括基本数据型以及实现了 `Comparable` 接口的对象型。如果需要自定义排序规则,则可通过传递一个 `Comparator` 实现对象来完成。 ```java Student[] students = {new Student("Alice", 20), new Student("Bob", 22)}; // 默认情况下会抛出异常除非 Student 已经实现 Comparable 接口 Arrays.sort(students); // 自定义比较器 Arrays.sort(students, (s1, s2) -> s1.getAge().compareTo(s2.getAge())); ``` 当处理复杂的数据结构时,通过提供定制化的 comparator 可灵活调整排序逻辑[^1]。 #### 查找特定值 - 使用二分法搜索 为了高效定位某个数值在已排序数组中的位置,可采用 `binarySearch()` 函数。需要注意的是,在执行之前必须确保输入序列已被正确排序;否则可能导致错误的结果。 ```java int[] sortedArr = {1, 3, 5, 7, 9}; int index = Arrays.binarySearch(sortedArr, 5); // 返回索引号 '2' if (index >= 0){ System.out.println("Found at position:"+(index+1)); } else { System.out.println(-index-1+" is the insertion point."); } ``` 这里展示了如何利用 binary search 来快速检索目标项并判断是否存在或者计算插入点[^4]。 #### 复制部分或全部数组 有时我们需要创建原数组的一部分副本而不是整个拷贝过来,这时就可以借助 fill 和 copyOf 系列函数达成目的。 ```java char[] letters = {'a', 'b', 'c'}; char[] subLetters = Arrays.copyOfRange(letters, 0, 2); // ['a','b'] boolean allMatched = Arrays.equals(subLetters,new char[]{'a','b'}); System.out.print(allMatched?"Equal":"Not Equal"); ``` 上述例子说明了怎样截取一段连续区间内的字符形成新的独立变量存储空间[^5]。 #### 填充固定值到现有数组里去 如果有需求把某些区域填充成统一模式下的初始状态,那么 fills 就派上了用场啦!它可以接受三个参数分别代表起始偏移量、结束界限还有待填充值本身哦~ ```java double[] doublesArray=new double[6]; Arrays.fill(doublesArray,-Double.MAX_VALUE); for(double d:doublesArray){ System.out.printf("%.2e ",d); } ``` ### 总结 以上列举了一些常用的关于 Array 的操作技巧,它们极大地提高了开发效率同时也增强了程序代码可读性和维护便利度。当然除了这些之外还有很多其他实用的功能等待探索发现呢!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值