gpt4 book ai didi

java - 根据要求具有多个键值的 Arrays.binarySearch

转载 作者:太空宇宙 更新时间:2023-11-04 06:54:36 24 4
gpt4 key购买 nike

对于对象数组,是否可以实现需要匹配多个键值的二分查找方法(最好使用Arrays.binarySearch)?

比如说,数组的对象类型有一个构造函数 obj(String a, String b, int c) 。如何实现 Arrays.binarySearch 来查找与任何变量 String a 具有相同值的对象和String b代表我指定的? (即类似 Arrays.binarySearch(arrayName, value for varX, value for varY) )

当然,为每个对象添加唯一标识符更有意义,但在这种情况下,我不能。

我应该对 compareTo 做点什么吗?在对象类中(就像我已经为排序所做的那样)?

非常感谢任何帮助。

谢谢您,祝您有愉快的一天!

最佳答案

Here we are using Comparable to compare the objects.

遵循的步骤:

  • 为您的自定义类实现Comparable
  • compareTo() 方法中根据 ab 比较值
  • 现在在二分搜索之前对数组进行排序
  • 传递一个虚拟对象,该对象在 binarySearch() 方法中为 ab 设置了值。
  • 仅此而已

尝试这个简单的代码:

import java.util.Arrays;

public class DemoTest {

/**
* @param args
*/
public static void main(String[] args) {
MyClass[] array = new MyClass[10];
for (int i = 0; i < array.length; i++) {
array[i] = new MyClass(String.valueOf(i), String.valueOf(i + 10), i + 20);
}

// sort before binary search
Arrays.sort(array);
int index = Arrays.binarySearch(array, new MyClass("5", "15"));
if (index > -1) {
System.out.println("found at " + index);
} else {
System.out.println("not found");
}

index = Arrays.binarySearch(array, new MyClass("6", "15"));
if (index > -1) {
System.out.println("found at " + index);
} else {
System.out.println("not found");
}

}
}

class MyClass implements Comparable<MyClass> {
private String a;
private String b;
private int c;

public MyClass(String a, String b) {
this.a = a;
this.b = b;
}

public MyClass(String a, String b, int c) {
this.a = a;
this.b = b;
this.c = c;
}


@Override
public int compareTo(MyClass o) {
int result = this.a.compareTo(o.a);
if (result == 0) {
return this.b.compareTo(o.b);
} else {
return result;
}
}

}

关于java - 根据要求具有多个键值的 Arrays.binarySearch,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22921344/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com