Java向量的二分搜索
Vector是Java中的遗留类,从Java 1.2 版本开始出现。它实现了 Collection 框架的 List 接口,可以在Java.util包中找到。 Vector 就像一个可以动态增长的数组。向量是同步的,即向量是线程安全的。向量主要用于线程同步至关重要的地方。在其他情况下,ArrayList 表现更好。由于 vector 是Java中的遗留类,因此 vector 中的元素只能通过 Enumeration 进行迭代。在本文中,我们将看到对向量的二分搜索操作。二分搜索是一种搜索技术,其中将已排序的数组重复分成两半,并检查中间元素是否为目标元素。要搜索向量中的目标元素,我们将使用Collections类的 binarySearch() 方法。
句法:
binarySearch(List list, Object target)
参数:
- list:第一个参数是要对其执行二进制搜索的 List 类型对象。
- target:第二个参数是目标元素的值。
返回值:如果找到则返回目标元素的索引,否则返回-1 。
例子:
Java
// Java program to demonstrate binary search on vector
import java.util.*;
class BinarySearchOnVector {
public static void main(String[] args)
{
// creating a Vector object
Vector v = new Vector<>();
// Add elements to Vector
v.add(10);
v.add(50);
v.add(20);
v.add(40);
v.add(25);
// binary search works only on sorted list
Collections.sort(v);
// search an element using binarySearch method of
// Collections class
int index = Collections.binarySearch(v, 25);
// print the position of target
System.out.println("Element is found at index : "
+ index);
}
}
Java
// Java program to demonstrate binary search on vector
import java.util.*;
class BinarySearchVectorExample {
public static void main(String[] args)
{
// creating a Vector object
Vector v = new Vector<>();
// Add elements to Vector
v.add("10");
v.add("B");
v.add("20");
v.add("A");
v.add("25");
// binary search works only on sorted list
Collections.sort(v);
System.out.println("Sorted Vector: " + v);
// search an element using binarySearch method of
// Collections class
int index = Collections.binarySearch(v, "25");
// prin the position of target
System.out.println("Element is found at index : "
+ index);
}
}
输出
Element is found at index : 2
解释:
向量元素未按排序顺序添加。由于二分搜索仅适用于已排序的列表,因此我们先对向量进行排序,然后执行二分搜索。目标位于索引2处,因此返回并打印该值。
时间复杂度: O(log n) 其中n是向量的大小。
示例 2:
Java
// Java program to demonstrate binary search on vector
import java.util.*;
class BinarySearchVectorExample {
public static void main(String[] args)
{
// creating a Vector object
Vector v = new Vector<>();
// Add elements to Vector
v.add("10");
v.add("B");
v.add("20");
v.add("A");
v.add("25");
// binary search works only on sorted list
Collections.sort(v);
System.out.println("Sorted Vector: " + v);
// search an element using binarySearch method of
// Collections class
int index = Collections.binarySearch(v, "25");
// prin the position of target
System.out.println("Element is found at index : "
+ index);
}
}
输出
Sorted Vector: [10, 20, 25, A, B]
Element is found at index : 2
说明:数字字符串位于字母字符串之前。现在目标字符串25 位于索引 2 处,因此返回并打印该值。
时间复杂度: O(log n) 其中n是向量的大小。