Java教程

Java Collections binarySearch()

binarySearch()是Java Collections 类的内置方法,该方法返回已排序对象的位置清单。有 两种不同类型的Java集合 binarySearch()方法,可以根据其参数进行区分。
这些是:
Java集合binarySearch(List > list, T key) Java集合binarySearch(List list, T key, Comparator c)

Java集合binarySearch(List > list, T key)

此方法用于在提供的列表中搜索使用二进制搜索算法指定的对象。在进行方法调用之前,必须根据指定的自然数将列表按升序排序。如果列表未排序,则结果不确定。

Java集合binarySearch(List list, T key, Comparator c)

此方法用于搜索提供的使用二进制搜索算法查找指定对象的列表。在进行方法调用之前,必须根据指定的比较器将列表按升序排序。

语法

以下是 binarySearch( )方法:
public static <T> int binarySearch(List<? extends Comparable<? super T>> list, T key)
public static <T> int binarySearch(List<? extends T> list, T key, Comparator<? super T> c)

参数

参数 说明 必需/可选
list 由用户指定要搜索。 必需
key 这是在提供的列表中要搜索的键。 必需
c 它是用于对列表进行排序的比较器。 必需

返回

方法 返回
binarySearch(List > list, T key) 它以升序排序列表返回键的索引。
binarySearch(List list, T key, Comparator c) 它返回比较器c定义的顺序的排序列表中键的索引。

异常

ClassCastException -如果列表中的元素不能相互比较或搜索键不能相互比较,则会引发异常

兼容性版本

Java 1.5及更高版本

示例1

import java.util.*;
public class CollectionsBinarySearchExample1 {
  public static void main(String[] args) {
    //Create list       
        ArrayList<String> arrlist = new ArrayList<String>();
        arrlist.add("A");
        arrlist.add("B");
        arrlist.add("C");
        arrlist.add("D");
        //Search the list for key 'D'
        int index = Collections.binarySearch(arrlist, "D");     
        System.out.println("index 'D' is available at position: "+index);
    }
}
输出:
index 'D' is available at position: 3

示例2

import java.util.*;
public class CollectionsBinarySearchExample2 {
  public static void main(String[] args) {
    //Create list       
        ArrayList<Integer> arrlist = new ArrayList<Integer>();
        arrlist.add(10);
        arrlist.add(-20);
        arrlist.add(30);
        arrlist.add(-40);
        arrlist.add(50);
        //Print List
        System.out.println("Provided List are: "+arrlist);
        //Search the list for key '-20'
        int index = Collections.binarySearch(arrlist, -20,  Collections.reverseOrder());     
        System.out.println("Index '-20' is available at position: "+index);
    }
}
输出:
Provided List are: [10, -20, 30, -40, 50]
Index '-20' is available at position: -4

示例3

import java.util.*;
public class CollectionsBinarySearchExample3 {
  public static void main(String[] args) {    
    //Create list       
        ArrayList<Integer> arrlist = new ArrayList<Integer>();
        arrlist.add(10);
        arrlist.add(-20);
        arrlist.add(30);
        //Print List
        System.out.println("Provided List are: "+arrlist);
        System.out.print("Enter the search key: ");
        Scanner sc = new Scanner (System.in);
        String key = sc.next();
        int index = Collections.binarySearch(arrlist, key,  Collections.reverseOrder());     
        System.out.println("Search Key is available at position: "+index);
        sc.close();
    }
}
输出:
Provided List are: [10, -20, 30]
Enter the search key: D
Exception in thread "main" java.lang.ClassCastException: java.base/java.lang.Integer cannot be cast to java.base/java.lang.String
  at java.base/java.lang.String.compareTo(String.java:124)
  at java.base/java.util.Collections$ReverseComparator.compare(Collections.java:5140)
  at java.base/java.util.Collections$ReverseComparator.compare(Collections.java:5131)
  at java.base/java.util.Collections.indexedBinarySearch(Collections.java:333)
  at java.base/java.util.Collections.binarySearch(Collections.java:321)
  at myPackage.CollectionBinarySearchExample3.main(CollectionBinarySearchExample3.java:16)

示例4

import java.util.*;
public class CollectionsBinarySearchExample4 {
  public static void main(String[] args) {    
    //Create list       
        ArrayList<Integer> arlist = new ArrayList<Integer>();
        arlist.add(5);
        arlist.add(4);
        arlist.add(2);
        arlist.add(1);
        arlist.add(3);        
        Collections.sort(arlist);
        //Search for key  
        int index = Collections.binarySearch(arlist, 4, null );     
        System.out.println("4 is available at index: "+index);
    }
}
输出:
4 is available at index: 3

示例5

import java.util.*;
public class CollectionsBinarySearchExample5 {
  public static void main(String[] args) {
    //Create a list
        List<Domain> list = new ArrayList<Domain>();
        list.add(new Domain(10, "www.lidihuo.com"));
        list.add(new Domain(20, "www.sssit.com"));
        list.add(new Domain(30, "www.hindi100.com"));
        Comparator<Domain> c = new Comparator<Domain>()
        {
            public int compare(Domain u1, Domain u2)
            {
                return u1.getId().compareTo(u2.getId());
            }
        };
        /* Searching a domain with key value 10. To search
        we create an object of domain with key 10. */
        int index = Collections.binarySearch(list, new Domain(10, null), c);
        System.out.println("Available at index: " + index);
        //Searching an item with key 5
        index = Collections.binarySearch(list, new Domain(5, null), c);
        System.out.println("Found at index: " +index);
        }
}
//user-defined class to store domains with id and url
class Domain
{
    private int id;
    private String url;
    // Constructor
    public Domain(int id, String url)
    {
        this.id = id;
        this.url = url;
    }
    public Integer getId()
    {
        return Integer.valueOf(id);
    }
}
输出:
Available at index: 0
Found at index: -1

昵称: 邮箱:
Copyright © 2022 立地货 All Rights Reserved.
备案号:京ICP备14037608号-4