Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/323.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在用户定义类的对象数组上实现二进制搜索_Java_Collections_Binary Search - Fatal编程技术网

Java 如何在用户定义类的对象数组上实现二进制搜索

Java 如何在用户定义类的对象数组上实现二进制搜索,java,collections,binary-search,Java,Collections,Binary Search,我正在学习如何在用户定义类的对象数组上实现二进制搜索。我偶然发现 我完全理解投票结果最高的答案中给出的程序。 当进行二进制搜索时,比如程序中的第27行 Collections.binarySearch(l, new User(20, null), c); 据我所知,我猜它正在搜索这样一个用户对象,在使用比较器c排序的ArrayList l中,它包含20。传递null以代替as字符串名参数 为了进一步改进此程序,可以对搜索包含名称变量的用户对象进行哪些更改?并且只根据名字搜索它,假设我们不知道它

我正在学习如何在用户定义类的对象数组上实现二进制搜索。我偶然发现

我完全理解投票结果最高的答案中给出的程序。 当进行二进制搜索时,比如程序中的第27行

Collections.binarySearch(l, new User(20, null), c);
据我所知,我猜它正在搜索这样一个用户对象,在使用比较器c排序的ArrayList l中,它包含20。传递null以代替as字符串名参数

为了进一步改进此程序,可以对搜索包含名称变量的用户对象进行哪些更改?并且只根据名字搜索它,假设我们不知道它的id

编辑: 我已经给出了一个类似问题的链接,我不是在要求相同的逻辑。我要求在这个问题上有所改进

为了澄清一些困惑,在相关问题中

Collections.binarySearch(l, new User(20, null), c);
用于搜索id为20的对象而不知道名称,因为传递了null。 我试图理解反之亦然。使用名称搜索对象,但不知道id,类似于

Collections.binarySearch(l, new User(null, "A"), c);

仅当输入数组按照要搜索的属性排序时,才能应用二进制搜索

因此,在您的情况下,用户列表必须按其用户名属性排序。您可以使用相同的比较器对列表进行排序以实现这一点

在Java中:

Collections.sort(l, c);

而不是返回u1.getId.compareTou2.getId;在比较器中,它将返回u1.getName.compareTou2.getName@RobertHarvey,它将根据名称对ArrayList进行排序,但它是否仅根据其名称搜索对象?是否要搜索名称包含字母A的条目,然后遍历所有条目并检查name.containsA,或者是否要搜索名称等于字符串A的条目,然后第一条注释生效。