Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/370.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 当输入未排序时,Collections.binarySearch()和comparator如何工作?_Java_Binary Search - Fatal编程技术网

Java 当输入未排序时,Collections.binarySearch()和comparator如何工作?

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"));

我感到困惑的是,这种方法并没有像预期的那样有效:

公共静态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")); 
    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按升序排序。”这是一个先决条件,而不是它执行的语句。