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

时间:2015-05-19 19:11:25

标签: java collections binary-search

我正在学习如何在用户定义的类的对象数组上实现二进制搜索。我遇到了this question

我完全理解顶级投票答案中给出的节目。 在进行二分查找时,比如程序中的第27行,

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

根据我的理解,我猜它正在使用Comparator User排序的ArrayList l中搜索这样一个c对象,其中包含20. null被传递代替String name参数。

为了进一步改进此程序,可以对其User变量中包含“A”的name对象进行哪些更改?并仅根据name进行搜索,假设我们不了解其id

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

并在链接的问题中清除一些混淆

Collections.binarySearch(l, new User(20, null), c);
使用

以便搜索具有id 20的对象而不知道name(因为传递了null)。 我试图理解反之亦然。使用name搜索对象而不知道id,就像执行

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

1 个答案:

答案 0 :(得分:0)

当输入数组按照您要搜索的属性进行排序时,您只能应用二进制搜索。

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

在Java中:

Collections.sort(l, c);