当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


Java Collections.binarySearch()用法及代码示例


java.util.Collections.binarySearch()方法是一个java.util.Collections类方法,该方法返回对象在排序列表中的位置。

// Returns index of key in sorted list sorted in
// ascending order
public static int binarySearch(List slist, T key)

// Returns index of key in sorted list sorted in
// order defined by Comparator c.
public static int binarySearch(List slist, T key, Comparator c)

If key is not present, the it returns "(-(insertion point) - 1)". 
The insertion point is defined as the point at which the key 
would be inserted into the list.

如果list的元素与指定的比较器不具有可比性,或者该元素的搜索关键字不可替代,则该方法将引发ClassCastException。

在按升序排序的列表中搜索int键:


// Java program to demonstrate working of Collections. 
// binarySearch() 
import java.util.List; 
import java.util.ArrayList; 
import java.util.Collections; 
  
public class GFG 
{ 
    public static void main(String[] args) 
    { 
        List al = new ArrayList(); 
        al.add(1); 
        al.add(2); 
        al.add(3); 
        al.add(10); 
        al.add(20); 
  
        // 10 is present at index 3. 
        int index = Collections.binarySearch(al, 10); 
        System.out.println(index); 
  
        // 13 is not present. 13 would have been inserted 
        // at position 4. So the function returns (-4-1)  
        // which is -5. 
        index = Collections.binarySearch(al, 13); 
        System.out.println(index); 
    } 
}

输出:

3
-5

在以降序排列的列表中搜索int键。

// Java program to demonstrate working of Collections. 
// binarySearch() in an array sorted in descending order. 
import java.util.List; 
import java.util.ArrayList; 
import java.util.Collections; 
  
public class GFG 
{ 
    public static void main(String[] args) 
    { 
        List al = new ArrayList(); 
        al.add(100); 
        al.add(50); 
        al.add(30); 
        al.add(10); 
        al.add(2); 
  
        // The last parameter specifies the comparator method 
        // used for sorting. 
        int index = Collections.binarySearch(al, 50,  
                                  Collections.reverseOrder()); 
  
        System.out.println("Found at index " + index); 
    } 
}

输出:

Found at index 1

搜索用户定义的类对象的列表:

// Java program to demonstrate working of Collections. 
// binarySearch() in a list of user defined objects 
import java.util.*; 
  
class Binarysearch 
{ 
    public static void main(String[] args) 
    { 
        // Create a list 
        List<Domain> l = new ArrayList<Domain>(); 
        l.add(new Domain(10, "quiz.geeksforgeeks.org")); 
        l.add(new Domain(20, "practice.geeksforgeeks.org")); 
        l.add(new Domain(30, "code.geeksforgeeks.org")); 
        l.add(new Domain(40, "www.geeksforgeeks.org")); 
  
        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(l, 
                                 new Domain(10, null), c); 
        System.out.println("Found at index  " + index); 
  
        // Searching an item with key 5 
        index = Collections.binarySearch(l, 
                                 new Domain(5, null), c); 
        System.out.println(index); 
    } 
} 
  
// A 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); 
    } 
}

输出:

0
-1

数组.binarysearch() vs Collections.binarySearch()
Arrays.binarysearch()适用于也可以是原始数据类型的数组。 Collections.binarysearch()适用于ArrayList和LinkedList之类的对象集合。

重要事项:

  • 如果输入列表未排序,则结果不确定。
  • 如果有重复项,则不能保证将找到哪一个。
  • 对于ArrayList之类的“random access”列表,此方法以log(n)时间运行。如果指定的列表未实现RandomAccess接口且很大,则此方法将执行基于迭代器的二进制搜索,该搜索执行O(n)链接遍历和O(log n)元素比较。

参考:
https://docs.oracle.com/javase/7/docs/api/java/util/Collections.html#binarySearch(java.util.List,%20T)



相关用法


注:本文由纯净天空筛选整理自 Collections.binarySearch() in Java with Examples。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。