📜  Java向量的二分搜索

📅  最后修改于: 2022-05-13 01:55:26.770000             🧑  作者: Mango

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是向量的大小。