Rumah > Java > javaTutorial > Program Java untuk mencari objek yang ditentukan pengguna dari senarai dengan menggunakan pembanding carian binari

Program Java untuk mencari objek yang ditentukan pengguna dari senarai dengan menggunakan pembanding carian binari

WBOY
Lepaskan: 2023-08-28 16:05:09
ke hadapan
1438 orang telah melayarinya

Program Java untuk mencari objek yang ditentukan pengguna dari senarai dengan menggunakan pembanding carian binari

Antara muka pembanding Java untuk mengisih objek Java. Kelas pembanding dalam Java membandingkan objek yang berbeza (Obj 01, Obj 02) dengan memanggil "java.util.comparator". Dalam kaedah ini, objek boleh dibandingkan berdasarkan nilai pulangan. Perbandingan boleh menjadi positif, sama, atau negatif.

Proses ini menyediakan pengguna dengan pelbagai urutan pengisihan. Terdapat banyak cara untuk membandingkan kedua-dua kaedah.

  • kelas perbandingan int awam (obj 1, obj 2) - Melakukan perbandingan antara dua objek.

  • public Boolean equals (obj) - Membandingkan objek semasa dengan objek yang ditentukan.

Java Collection Class - Menyediakan kaedah statik untuk menyusun elemen dalam pengumpulan data. Elemen koleksi ini digunakan dalam TreeMap.

Mari kita bincangkan cara membina kod Java menggunakan pembanding untuk mencari objek yang ditentukan pengguna daripada senarai melalui carian binari.

Parameter carian binari dan komponennya

  • Parameter

    • ialah tatasusunan khusus

    • fromindex - elemen pertama untuk dicari

    • toindex - elemen terakhir untuk dicari kunci - nilai untuk dicari Pasangan nilai kunci untuk dicari

    • Pembanding

  • Kembali

    • Mengembalikan indeks kekunci carian yang wujud dalam julat yang ditentukan.

  • Pengecualian

    • ClassCast

    • Parameter yang tidak sah

    • ArrayIndexOutOfBounds

Algoritma

  • Langkah pertama - mulakan.

  • Langkah 2 - Pengiraan set elemen pertengahan.

  • Langkah 3 - Bandingkan kata kunci dengan elemen tengah.

  • Langkah 4 - Jika nilai elemen utama dan pertengahan adalah sama;

  • Langkah 5 - Jika tidak, nilai kunci lebih besar daripada elemen tengah, kemudian ikut separuh kanan set

  • Langkah 6 - Atau; jika nilai kunci kurang daripada elemen pertengahan maka ikut bahagian atas

Carian binari menggunakan pembanding - sintaks

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)
Salin selepas log masuk

Terdapat dua sintaks yang terkenal untuk mencari objek yang ditentukan pengguna daripada senarai melalui carian binari menggunakan pembanding. Untuk kes pertama, senarai perlu diisih dalam tertib menaik dan prosedur dipanggil menggunakan kaedah tertentu, di mana hasilnya tidak ditentukan.

Sebaliknya, untuk mencari objek tertentu, adalah penting untuk memanggil kaedah.

Cara mengikuti

  • Kaedah 1 untuk mencari objek yang ditentukan pengguna daripada senarai dengan menggunakan pencari binari dan pembanding

Cari objek yang ditentukan pengguna daripada senarai menggunakan pembanding

Dalam contoh ini, kami menggunakan koleksi, binarySearch() dan operasi kelas pembanding untuk mengisih beberapa data yang ditentukan pengguna menggunakan operasi carian binari melalui pembanding

Contoh 1: Gunakan Collections, binarySearch() untuk mencari data daripada senarai

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); }
}
Salin selepas log masuk

Output

Found at index number zone-1
-1
Salin selepas log masuk

Contoh 2: Isih senarai dalam tertib menaik

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>
Salin selepas log masuk

Output

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

Contoh 3: Isih senarai dalam tertib menurun dan cari nombor indeks

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);
	}
}
Salin selepas log masuk

Output

Found at index number present -4
Salin selepas log masuk

Contoh 4: Cari bilangan elemen dan nilai

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");
   }
}
Salin selepas log masuk

Output

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

Kesimpulan

Dalam artikel ini, kami mempelajari tentang antara muka Setanding dalam Java dengan beberapa kod sampel dan algoritma. Di sini kami mengisytiharkan beberapa kelas yang ditentukan pengguna dan antara muka pembanding. Mereka menyediakan beberapa tujuan khusus dan membenarkan data khusus diproses dalam persekitaran Java.

Atas ialah kandungan terperinci Program Java untuk mencari objek yang ditentukan pengguna dari senarai dengan menggunakan pembanding carian binari. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:tutorialspoint.com
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan