Arrays.binarySearch
在 Java 中,数组二分查找主要有两种方式,一种是手动实现二分查找逻辑,另一种是使用 Java 标准库中提供的
Arrays.binarySearch
方法。下面分别为你详细介绍:手动实现二分查找
手动实现二分查找可以让你更好地理解其原理,以下是一个示例代码:
java
public class BinarySearchExample { public static int binarySearch(int[] arr, int target) { int left = 0; int right = arr.length - 1; while (left <= right) { int mid = left + (right - left) / 2; if (arr[mid] == target) { return mid; } else if (arr[mid] < target) { left = mid + 1; } else { right = mid - 1; } } return -1; } public static void main(String[] args) { int[] arr = {1, 3, 5, 7, 9, 11, 13}; int target = 7; int result = binarySearch(arr, target); if (result != -1) { System.out.println("目标元素 " + target + " 在数组中的索引是: " + result); } else { System.out.println("目标元素 " + target + " 不在数组中。"); } } }
代码解释:
- 方法定义:
binarySearch
方法接收一个整型数组arr
和目标元素target
作为参数。- 初始化指针:
left
初始化为数组的起始索引0
,right
初始化为数组的最后一个元素的索引arr.length - 1
。- 循环查找:在
left
小于等于right
的条件下进行循环,每次计算中间索引mid
。
- 如果中间元素等于目标元素,返回中间索引。
- 如果中间元素小于目标元素,将
left
指针更新为mid + 1
,缩小查找范围到右半部分。- 如果中间元素大于目标元素,将
right
指针更新为mid - 1
,缩小查找范围到左半部分。- 未找到情况:如果循环结束后仍未找到目标元素,返回
-1
。使用
Arrays.binarySearch
方法
Arrays
类是 Java 标准库中用于操作数组的工具类,其中的binarySearch
方法可以方便地实现二分查找。示例代码如下:java
import java.util.Arrays; public class ArraysBinarySearchExample { public static void main(String[] args) { int[] arr = {1, 3, 5, 7, 9, 11, 13}; int target = 7; int result = Arrays.binarySearch(arr, target); if (result >= 0) { System.out.println("目标元素 " + target + " 在数组中的索引是: " + result); } else { System.out.println("目标元素 " + target + " 不在数组中。"); } } }
代码解释:
- 方法调用:
Arrays.binarySearch(arr, target)
方法接收一个数组arr
和目标元素target
作为参数。- 返回值:如果找到目标元素,返回其在数组中的索引;如果未找到,返回一个负数,该负数是
-(插入点) - 1
,其中插入点是目标元素应该插入的位置。注意事项
- 数组必须有序:无论是手动实现还是使用
Arrays.binarySearch
方法,数组都必须是有序的,否则二分查找的结果将是不确定的。- 查找首次出现位置:
Arrays.binarySearch
方法只能找到目标元素在数组中的一个位置,如果需要找到目标元素首次出现的位置,需要手动实现二分查找逻辑。
Integer.parseInt()
public static int parseInt(String s)
:将字符串s
转换为十进制的int
类型整数。public static int parseInt(String s, int radix)
:将字符串s
按照指定的进制radix
转换为int
类型整数。示例代码
java
public class ParseIntExample { public static void main(String[] args) { // 使用 parseInt(String s) 方法 String decimalStr = "123"; int decimalNum = Integer.parseInt(decimalStr); System.out.println("十进制字符串转换结果: " + decimalNum); // 使用 parseInt(String s, int radix) 方法 String binaryStr = "101"; int binaryNum = Integer.parseInt(binaryStr, 2); System.out.println("二进制字符串转换结果: " + binaryNum); String hexStr = "FF"; int hexNum = Integer.parseInt(hexStr, 16); System.out.println("十六进制字符串转换结果: " + hexNum); } }
代码解释
Integer.parseInt(decimalStr)
:把字符串"123"
当作十进制数转换为int
类型,结果为123
。Integer.parseInt(binaryStr, 2)
:将字符串"101"
按照二进制规则转换为int
类型,结果为5
。Integer.parseInt(hexStr, 16)
:把字符串"FF"
按照十六进制规则转换为int
类型,结果为255
。参数说明
s
:要转换的字符串。此字符串必须是合法的数字表示形式,不然会抛出异常。radix
:可选参数,指定字符串的进制,取值范围是2
到36
。若不指定该参数,默认使用十进制。
toString()
Java 的基本数据类型都有对应的包装类,如
Integer
、Double
等,这些包装类也重写了toString()
方法,用于将包装类对象转换为对应的字符串表示。示例
java
public class Main { public static void main(String[] args) { Integer num = 123; String numStr = num.toString(); System.out.println(numStr); Double d = 3.14; String dStr = d.toString(); System.out.println(dStr); } }
解释
Integer
类的toString()
方法将Integer
对象转换为对应的十进制字符串,Double
类的toString()
方法将Double
对象转换为对应的字符串表示。运行上述代码,输出分别为123<