我正在学习如何在用户定义的类的对象数组上实现二进制搜索。我遇到了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);
答案 0 :(得分:0)
当输入数组按照您要搜索的属性进行排序时,您只能应用二进制搜索。
因此,在您的情况下,用户列表必须按其用户名属性进行排序。您可以使用相同的比较器对列表进行排序,以实现此目的。
在Java中:
Collections.sort(l, c);