目录
二分搜索参数及其组成部分
算法
使用比较器的二分查找 - 语法 
跟随的方法
使用比较器从列表中搜索用户定义的对象
示例 1:使用 Collections、binarySearch() 从列表中查找数据
输出
示例2:按升序对列表进行排序
示例3:对列表进行降序排序并查找索引号
示例 4:查找元素和值的数量
结论
首页 Java java教程 Java程序通过使用二分搜索比较器从列表中搜索用户定义的对象

Java程序通过使用二分搜索比较器从列表中搜索用户定义的对象

Aug 28, 2023 pm 04:05 PM
java程序 比较器 二分搜索

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中文网其他相关文章!

本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

AI Hentai Generator

AI Hentai Generator

免费生成ai无尽的。

热门文章

R.E.P.O.能量晶体解释及其做什么(黄色晶体)
3 周前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳图形设置
3 周前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您听不到任何人,如何修复音频
3 周前 By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25:如何解锁Myrise中的所有内容
4 周前 By 尊渡假赌尊渡假赌尊渡假赌

热工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

Java程序打开命令提示符并插入命令 Java程序打开命令提示符并插入命令 Aug 19, 2023 pm 12:29 PM

本文使用多种方法通过 Java 代码选择在打开的命令窗口中插入的命令。命令窗口是使用“cmd”打开的。这里,使用 Java 代码指定执行相同操作的方法。首先使用 Java 程序打开命令窗口。

Java程序用于检查TPP学生是否有资格参加面试 Java程序用于检查TPP学生是否有资格参加面试 Sep 06, 2023 pm 10:33 PM

请考虑下表了解不同公司的资格标准-CGPA的中文翻译为:绩点平均成绩符合条件的公司大于或等于8谷歌、微软、亚马逊、戴尔、英特尔、Wipro大于或等于7教程点、accenture、Infosys、Emicon、Rellins大于或等于6rtCamp、Cyber​​tech、Skybags、Killer、Raymond大于或等于5Patronics、鞋子、NoBrokers让我们进入java程序来检查tpp学生参加面试的资格。方法1:使用ifelseif条件通常,当我们必须检查多个条件时,我们会使用

使用类的概念编写Java程序来计算矩形的面积和周长 使用类的概念编写Java程序来计算矩形的面积和周长 Sep 03, 2023 am 11:37 AM

Java语言是当今世界上最常用的面向对象编程语言之一。类的概念是面向对象语言中最重要的特性之一。一个类就像一个对象的蓝图。例如,当我们想要建造一座房子时,我们首先创建一份房子的蓝图,换句话说,我们创建一个显示我们将如何建造房子的计划。根据这个计划,我们可以建造许多房子。同样地,使用类,我们可以创建许多对象。类是创建许多对象的蓝图,其中对象是真实世界的实体,如汽车、自行车、笔等。一个类具有所有对象的特征,而对象具有这些特征的值。在本文中,我们将使用类的概念编写一个Java程序,以找到矩形的周长和面

Java程序获取给定文件的大小(以字节、千字节和兆字节为单位) Java程序获取给定文件的大小(以字节、千字节和兆字节为单位) Sep 06, 2023 am 10:13 AM

文件的大小是特定文件在特定存储设备(例如硬盘驱动器)上占用的存储空间量。文件的大小以字节为单位来衡量。在本节中,我们将讨论如何实现一个java程序来获取给定文件的大小(以字节、千字节和兆字节为单位)。字节是数字信息的最小单位。一个字节等于八位。1千字节(KB)=1,024字节1兆字节(MB)=1,024KB千兆字节(GB)=1,024MB和1太字节(TB)=1,024GB。文件的大小通常取决于文件的类型及其包含的数据量。以文本文档为例,文件的大小可能只有几千字节,而高分辨率图像或视频文件的大小可

使用继承的Java程序来计算定期存款(FDs)和定期存款(RDs)的利息 使用继承的Java程序来计算定期存款(FDs)和定期存款(RDs)的利息 Aug 20, 2023 pm 10:49 PM

继承是一个概念,它允许我们从一个类访问另一个类的属性和行为。被继承方法和成员变量的类被称为超类或父类,而继承这些方法和成员变量的类被称为子类或子类。在Java中,我们使用“extends”关键字来继承一个类。在本文中,我们将讨论使用继承来计算定期存款和定期存款的利息的Java程序。首先,在您的本地机器IDE中创建这四个Java文件-Acnt.java−这个文件将包含一个抽象类‘Acnt’,用于存储账户详情,如利率和金额。它还将具有一个带有参数‘amnt’的抽象方法‘calcIntrst’,用于计

JAVA程序将罗马数字转换为整数数字 JAVA程序将罗马数字转换为整数数字 Aug 25, 2023 am 11:41 AM

罗马数字-基于古罗马系统,使用符号来表示数字。这些数字称为罗马数字。符号为I、V、X、L、C、D和M,分别代表1、5、10、50、100、500和1,000。整数-整数就是由正值、负值和零值组成的整数。分数不是整数。这里我们根据整数值设置符号值。每当输入罗马数字作为输入时,我们都会将其划分为单位,然后计算适当的罗马数字。I-1II–2III–3IV–4V–5VI–6...X–10XI–11..XV-15在本文中,我们将了解如何在Java中将罗马数字转换为整数。向您展示一些实例-实例1InputR

Java程序创建金字塔和图案 Java程序创建金字塔和图案 Sep 05, 2023 pm 03:05 PM

如果有人想在Java编程语言方面打下坚实的基础。然后,有必要了解循环的工作原理。此外,解决金字塔模式问题是增强Java基础知识的最佳方法,因为它包括for和while循环的广泛使用。本文旨在提供一些Java程序,借助Java中可用的不同类型的循环来打印金字塔图案。创建金字塔图案的Java程序我们将通过Java程序打印以下金字塔图案-倒星金字塔星金字塔数字金字塔让我们一一讨论。模式1:倒星金字塔方法声明并初始化一个指定行数的整数“n”。接下来,将空间的初始计数定义为0,将星形的初始计数定义为“n+

Java程序旋转图像 Java程序旋转图像 Sep 01, 2023 pm 04:25 PM

一个图像文件可以顺时针或逆时针旋转。要旋转图像,需要下载一个随机的图像文件并将其保存在系统的任何文件夹中。此外,需要一个.pdf文件,在打开下载的图像文件后,可以在该特定的.pdf文件中旋转一些角度。对于90度的旋转,新图像的锚点可以帮助我们使用Java中的平移变换执行旋转操作。锚点是任何特定图像的中心。AlgorithmtoRotateanImagebyUsingJavaThe"AffineTransformOp"classisthesimplestwaytorotatea

See all articles