Java 当输入未排序时,Collections.binarySearch()和comparator如何工作?
我感到困惑的是,这种方法并没有像预期的那样有效: 公共静态int二进制搜索(列表, T键, 比较器(c) 这是我的密码Java 当输入未排序时,Collections.binarySearch()和comparator如何工作?,java,binary-search,Java,Binary Search,我感到困惑的是,这种方法并没有像预期的那样有效: 公共静态int二进制搜索(列表, T键, 比较器(c) 这是我的密码 // Create a list List<Domain> l = new ArrayList<Domain>(); l.add(new Domain(10, "quiz.geeksforgeeks.org")); l.add(new Domain(70, "practice.geeksforgeeks.org"));
// Create a list
List<Domain> l = new ArrayList<Domain>();
l.add(new Domain(10, "quiz.geeksforgeeks.org"));
l.add(new Domain(70, "practice.geeksforgeeks.org"));
l.add(new Domain(30, "code.geeksforgeeks.org"));
l.add(new Domain(40, "www.geeksforgeeks.org"));
l.add(new Domain(20, "practice.geeksforgeeks.org"));
l.add(new Domain(21, "practice.geeksforgeeks.org"));
// Searching a domain with key value 10. To search
// we create an object of domain with key 10.
int index = Collections.binarySearch(l,
new Domain(31, null),new Comparator<Domain>()
{
public int compare(Domain u1, Domain u2)
{
return u1.getId().compareTo(u2.getId());
}
});
System.out.println("Found at index " + index);
//创建一个列表
列表l=新的ArrayList();
l、 添加(新域名(10,“quick.geeksforgeks.org”);
l、 新增(新域名(70,“practice.geeksforgeks.org”);
l、 添加(新域名(30,“code.geeksforgeks.org”);
l、 添加(新域名(40,“www.geeksforgeks.org”);
l、 新增(新域名(20,“practice.geeksforgeks.org”);
l、 新增(新域名(21,“practice.geeksforgeks.org”);
//正在搜索键值为10的域。搜寻
//我们使用键10创建一个域对象。
int index=Collections.binarySearch(l,
新域(31,null),新比较器()
{
公共整数比较(域u1、域u2)
{
返回u1.getId().compareTo(u2.getId());
}
});
System.out.println(“在索引处找到”+索引);
它向我返回-7,这是不正确的。
从文档中,它说“列表必须根据指定的比较器按升序排序”。这里的排序列表应该是:域(10…,20,21,30,40,70
我不明白为什么要使用-7?二进制搜索的先决条件是需要对输入列表进行排序(无论是默认的比较器还是自定义的)
您可以使用
Collections.sort()
方法(使用默认的comparator或custom)对列表进行预排序。“列表必须根据指定的comparator按升序排序。”这是一个先决条件,而不是它执行的语句。