首頁  >  文章  >  Java  >  Java程式透過使用二分搜尋比較器從清單中搜尋使用者定義的對象

Java程式透過使用二分搜尋比較器從清單中搜尋使用者定義的對象

WBOY
WBOY轉載
2023-08-28 16:05:091286瀏覽

Java程式透過使用二分搜尋比較器從清單中搜尋使用者定義的對象

用於對 Java 物件進行排序的 Java 比較器介面。 Java 中的比較器類別透過呼叫「java.util.comparator」來比較不同的物件(Obj 01、Obj 02)。在此方法中,可以根據傳回值對物件進行比較。比較可以是正數、相等或負數。

此過程為使用者提供了多個排序序列。有很多方法可以對兩種方法進行比較。

  • public int compare class (obj 1, obj 2) - 執行兩個物件之間的比較。

  • public Boolean equals (obj) - 比較目前物件與指定物件。

Java 集合類別 - 提供對資料集合中的元素進行排序的靜態方法。這裡集合元素用於 TreeMap。

讓我們討論如何使用比較器建立一個Java程式碼,透過二分查找從清單中搜尋使用者定義的物件。

二分搜尋參數及其組成部分

  • 參數

    • 是一個特定的陣列

    • fromindex - 要搜尋的第一個元素

    • toindex - 最後一個要搜尋的元素 key - 要搜尋的值 需要搜尋的鍵值對

    • 比較器

  • 返回

    • 傳回指定範圍內存在的搜尋鍵的索引。

  • 例外

    • ClassCast

    • 非法參數

    • ArrayIndexOutOfBounds

#演算法

  • 第一步 - 開始。

  • 第 2 步 - 中間元素集合計算。

  • 第三步驟 - 將關鍵字與中間元素進行比較。

  • 步驟 4 - 如果 key 和 mid 元素的值相同;然後傳回結果。

  • 步驟5 - 否則,鍵的值大於中間元素,則跟隨右半部集合

  • #第 6 步 - 或;如果 key 的值小於 mid 元素則遵循 upper

使用比較器的二分查找 - 語法 

public static int binarySearch(primitive() p,Primitive key)
public static int binarySearch(Object() o,Object key)

public static int binarySearch(Object() o,Object key,Comparator c)
Java Collections binarySearch(List<? extends Comparable1<? super R>> list, R key)and;
Java Collections binarySearch(List<? extends R> list, R key, Comparator<? super R> c)

有兩種眾所周知的語法,可以使用比較器透過二分來尋找從清單中搜尋使用者定義的物件。對於第一種情況,清單需要按升序排序,並使用特定的方法呼叫過程,其中結果是未定義的。

另一方面,要搜尋指定的對象,呼叫方法是很重要的。

跟隨的方法

  • 透過使用二分搜尋器和比較器從清單中搜尋使用者定義的物件的方法1

#使用比較器從清單中搜尋使用者定義的物件

在這些範例中,我們使用了集合、binarySearch()和comparator類別操作,透過comparator使用二分搜尋操作對一些使用者定義的資料進行排序

範例 1:使用 Collections、binarySearch() 從清單中尋找資料

import java.util.*;

public class Binarysearch {
   public static void main(String[] args){
      List<Domain> l1 = new ArrayList<Domain>();
      l1.add(new Domain(100, "India"));
      l1.add(new Domain(200, "Bangladesh"));
      l1.add(new Domain(300, "Dhaka"));
      l1.add(new Domain(400, "Kolkata"));

      Comparator<Domain> c = new Comparator<Domain>() {
      	 public int compare(Domain u1, Domain u2) {
            return u1.getId().compareTo(u2.getId());
      	 }
      };
      int index = Collections.binarySearch(	l1, new Domain(10, null), c);
      System.out.println("Found at index number zone" + index);
      index = Collections.binarySearch(l1, new Domain(6, null), c);
      System.out.println(index);
   }
}
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); }
}

輸出

Found at index number zone-1
-1

範例2:依升序對清單進行排序

#
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

public class ascendingsearch {
	public static void main(String[] args){
      List<Integer> ak = new ArrayList<integer>();
      ak.add(100);
      ak.add(200);
      ak.add(30);
      ak.add(10);
      ak.add(20);

      int index = Collections.binarySearch(ak, 100);
      System.out.println(index);
      index = Collections.binarySearch(ak, 130);
      System.out.println(index);
	}
}
</integer>

輸出

Note: ascendingsearch.java uses unchecked or unsafe operations.
Note: Recompile with -Xlint:unchecked for details.
-6
-6

範例3:對清單進行降序排序並尋找索引號碼

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

public class binsearchdecend {
	public static void main(String[] args){
      List<Integer> a0710 = new ArrayList<Integer>();
      a0710.add(1000);
      a0710.add(500);
      a0710.add(300);
      a0710.add(10);
      a0710.add(2);
      int index = Collections.binarySearch(
      	a0710, 50, Collections.reverseOrder());

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

輸出

Found at index number present -4

範例 4:找出元素和值的數量

import java.util.Scanner;
public class BinarySearchExample{
   public static void main(String args[]){
      int counter, num, item, array[], first, last, middle;
      Scanner input = new Scanner(System.in);
      System.out.println("Enter number of elements:");
      num = input.nextInt(); 
      array = new int[num];

      System.out.println("Enter " + num + " integers");
      for (counter = 0; counter < num; counter++)
          array[counter] = input.nextInt();

      System.out.println("Enter the search value:");
      item = input.nextInt();
      first = 0;
      last = num - 1;
      middle = (first + last)/2;

      while( first <= last ){
         if ( array[middle] < item )
           first = middle + 1;
         else if ( array[middle] == item ){
           System.out.println(item + " found at location " + (middle + 1) + ".");
           break;
         }
         else{
             last = middle - 1;
         }
         middle = (first + last)/2;
      }
      if ( first > last )
         System.out.println(item + " is not found.\n");
   }
}

輸出

Enter number of elements:
7
Enter 7 integers
10
12
56
42
48
99
100
Enter the search value:
50
50 is not found.

結論

在本文中,我們透過一些範例程式碼和演算法了解了 Java 中的 Comparable 介面。這裡我們聲明了一些使用者定義的類別和比較器介面。它們有一些特定的用途,允許在 Java 環境中處理特定的資料。

以上是Java程式透過使用二分搜尋比較器從清單中搜尋使用者定義的對象的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:tutorialspoint.com。如有侵權,請聯絡admin@php.cn刪除