java中list有二分查找吗
时间: 2024-05-07 10:18:04 浏览: 61
Java中的List接口并没有提供二分查找的方法,但是可以通过Collections工具类中的binarySearch方法来实现对List集合进行二分查找。需要注意的是,使用binarySearch方法的前提是List集合中的元素已经按照升序或者降序排列好。使用方法如下:
```java
List<Integer> list = new ArrayList<Integer>();
list.add(1);
list.add(3);
list.add(5);
list.add(7);
list.add(9);
int index = Collections.binarySearch(list, 5);
if (index >= 0) {
System.out.println("找到了,索引为:" + index);
} else {
System.out.println("未找到");
}
```
输出结果为:找到了,索引为:2
相关问题
Java list 二分查找
在Java中,可以使用List来存储一组元素,并且可以使用二分查找算法在有序的List中查找指定元素的位置。下面是一个示例代码:
```java
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
public class BinarySearchExample {
public static void main(String[] args) {
List<Integer> numbers = new ArrayList<>();
numbers.add(2);
numbers.add(5);
numbers.add(8);
numbers.add(12);
numbers.add(16);
numbers.add(23);
numbers.add(38);
numbers.add(56);
// 对List进行排序
Collections.sort(numbers);
int target = 12;
int index = binarySearch(numbers, target);
if (index != -1) {
System.out.println("元素 " + target + " 在List中的索引位置为:" + index);
} else {
System.out.println("元素 " + target + " 不在List中");
}
}
public static int binarySearch(List<Integer> list, int target) {
int left = 0;
int right = list.size() - 1;
while (left <= right) {
int mid = left + (right - left) / 2;
if (list.get(mid) == target) {
return mid;
} else if (list.get(mid) < target) {
left = mid + 1;
} else {
right = mid - 1;
}
}
return -1;
}
}
```
在上面的代码中,我们首先创建了一个List对象 `numbers`,并向其中添加了一些整数元素。然后,我们使用 `Collections.sort()` 方法对List进行排序,以确保二分查找算法的正确性。
接下来,我们定义了一个 `binarySearch()` 方法,该方法接受一个有序的List和一个目标元素作为参数。在方法中,我们使用了经典的二分查找算法来查找目标元素的位置。如果找到了目标元素,则返回其索引位置;如果未找到,则返回 -1。
最后,在 `main()` 方法中,我们调用了 `binarySearch()` 方法来查找数字 12 在List中的位置,并输出结果。
请注意,二分查找算法要求在进行查找之前,必须先对List进行排序。否则,结果将是不可预测的。
java递归算法实现二分查找
递归算法实现二分查找的Java代码可以参考以下示例:
```java
public class BinarySearch {
public static void main(String[] args) {
int[] nums = {1, 2, 6, 15, 18, 20, 25, 27, 35, 40, 45, 56, 62, 78, 88};
int findValue = 35;
int binaryResult = binarySearch(nums, 0, nums.length - 1, findValue);
System.out.println("元素第一次出现的位置(从0开始):" + binaryResult);
}
private static int binarySearch(int[] nums, int start, int end, int findValue) {
if (start <= end) {
int middle = (start + end) / 2;
if (findValue == nums[middle]) {
return middle; // 查找值等于中间值直接返回
} else if (findValue < nums[middle]) {
return binarySearch(nums, start, middle - 1, findValue); // 小于中间值,在中间值之前的数据中查找
} else {
return binarySearch(nums, middle + 1, end, findValue); // 大于中间值,在中间值之后的数据中查找
}
}
return -1;
}
}
```
这个递归实现的二分查找算法首先检查开始下标`start`是否小于等于结束下标`end`,如果是,则计算中间下标`middle`。然后通过比较查找值`findValue`与中间值`nums[middle]`的大小,决定是在中间值之前的数据中查找还是在中间值之后的数据中查找,递归调用`binarySearch`方法。如果查找值等于中间值,则直接返回中间下标;如果查找值小于中间值,则在中间值之前的数据中查找,更新结束下标`end`为`middle - 1`;如果查找值大于中间值,则在中间值之后的数据中查找,更新开始下标`start`为`middle + 1`。如果开始下标大于结束下标,表示未找到查找值,返回-1。
这样的递归实现方式能够不断缩小查找范围,提高查找效率。<span class="em">1</span><span class="em">2</span><span class="em">3</span>
#### 引用[.reference_title]
- *1* [二分查找递归解法(java)](https://blog.csdn.net/weixin_51577444/article/details/123763009)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"]
- *2* *3* [Java常用算法-二分查找算法(两种方法实现)](https://blog.csdn.net/zengqing2010/article/details/120680127)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"]
[ .reference_list ]
阅读全文