二进制搜索中的比较器

时间:2014-01-30 00:11:43

标签: binary-search comparator

我不知道如何为Collectionos.binarySearch()编写比较器。有人可以帮忙吗?示例代码:

List<Object> list1 = new ArrayList<>();

List<List<Object>> list2 = new ArrayList<>();


//loop starts
// adds elements into list1 

list1.add(values); // values是一个包含[3,John,Smith]

等元素的对象
if (list2.size() == 0) {
    list2.add(list1);//first element
} else {
    if (index >= 0)  {
   int index = Collections.binarySearch(list2, list1, comparator);
    list2.add(index, list1);//I want to add these elements in ascending order ?
} 
}

//loop ends

如何编写比较器,以便列表2中的元素按升序或降序添加。

3 个答案:

答案 0 :(得分:1)

您可以使用实现Comparator<List<Object>>的匿名类:

int index = Collections.binarySearch(list2, list1, new Comparator<List<Object>>() {
    @Override
    public int compare(List<Object> o1, List<Object> o2) {
        // Your implementation here
        return 0;
    }
});

答案 1 :(得分:0)

您可以实现IComparer<List<Object>> class,或使用lambda表达式。

答案 2 :(得分:0)

您只需要创建一个实现Comparator接口的类。

例如,您可以使用匿名类内联:

Comparator<List<Object>> comparator = new Comparator<List<Object>>() {

    @Override
    public int compare(List<Object> x, List<Object> y) { 
        // custom logic to compare x and y here. Return a negative number
        // if x < y, a positive number if x > y, and 0 otherwise
    }

};
Collections.binarySearch(list, comparator);