java中binarysearch是什么,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 l = new ArrayList();

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 c = new Comparator()

{

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)元素比较。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值