Рубрики

Collections.binarySearch () в Java с примерами

Метод 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.

Метод генерирует ClassCastException, если элементы списка несопоставимы с использованием указанного компаратора, или ключ поиска не может быть разделен с элементами.

Поиск ключа int в списке, отсортированном в порядке возрастания:

// Java-программа для демонстрации работы Коллекций.
// 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 присутствует в индексе 3.

        int index = Collections.binarySearch(al, 10);

        System.out.println(index);

  

        // 13 нет. 13 было бы вставлено

        // в позиции 4. Итак, функция возвращает (-4-1)

        // который равен -5.

        index = Collections.binarySearch(al, 13);

        System.out.println(index);

    }

}

Выход :

3
-5

Поиск ключа int в списке, отсортированном в порядке убывания.

// Java-программа для демонстрации работы Коллекций.
// 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(100);

        al.add(50);

        al.add(30);

        al.add(10);

        al.add(2);

  

        // Последний параметр указывает метод сравнения

        // используется для сортировки.

        int index = Collections.binarySearch(al, 50, 

                                  Collections.reverseOrder());

  

        System.out.println("Found at index " + index);

    }

}

Выход :

Found at index 1

Поиск в списке пользовательских объектов класса:

// Java-программа для демонстрации работы Коллекций.
// binarySearch () в списке пользовательских объектов

import java.util.*;

  

class Binarysearch

{

    public static void main(String[] args)

    {

        // Создать список

        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());

            }

        };

  

        // Поиск домена со значением ключа 10. Поиск

        // создаем объект домена с ключом 10.

        int index = Collections.binarySearch(l,

                                 new Domain(10, null), c);

        System.out.println("Found at index  " + index);

  

        // Поиск элемента с ключом 5

        index = Collections.binarySearch(l,

                                 new Domain(5, null), c);

        System.out.println(index);

    }

}

  
// Пользовательский класс для хранения доменов с идентификатором и URL

class Domain

{

    private int id;

    private String url;

  

    // Конструктор

    public Domain(int id, String url)

    {

        this.id = id;

        this.url = url;

    }

  

    public Integer getId()

    {

        return Integer.valueOf(id);

    }

}

Выход :

0
-1

Массивы .binarysearch () и Collections.binarySearch ()
Arrays.binarysearch () работает для массивов, которые также могут иметь примитивный тип данных. Коллекции .binarysearch () работает для объектов Коллекции, такие как ArrayList и LinkedList .

Важные моменты:

  • Если входной список не отсортирован, результаты не определены.
  • Если есть дубликаты, нет никакой гарантии, какой из них будет найден.
  • Этот метод выполняется во время log (n) для списка «произвольного доступа», такого как ArrayList. Если указанный список не реализует интерфейс RandomAccess и является большим, этот метод будет выполнять бинарный поиск на основе итератора, который выполняет O (n) обход ссылок и O (log n) сравнения элементов.

Ссылка :
https://docs.oracle.com/javase/7/docs/api/java/util/Collections.html#binarySearch(java.util.List,%20T)

Эта статья предоставлена Мохит Гупта . Если вам нравится GeeksforGeeks и вы хотите внести свой вклад, вы также можете написать статью и отправить ее по почте на contrib@geeksforgeeks.org. Смотрите свою статью, появляющуюся на главной странице GeeksforGeeks, и помогите другим вундеркиндам.

Пожалуйста, напишите комментарии, если вы обнаружите что-то неправильное, или вы хотите поделиться дополнительной информацией по обсуждаемой теме

Рекомендуемые посты:

Collections.binarySearch () в Java с примерами

0.00 (0%) 0 votes