java - binarySearch 实现问题

标签 java binary-search

当我尝试编写以下行时:

int foundIndex = Collections.<K>binarySearch(keys, key);

它显示错误:参数化方法<K>binarySearch(List<? extends Comparable<? super K>>, K)类型 Collections不适用于参数 (List<K>, K)

上述错误是什么意思,我的代码哪里做错了?

    // Comparator used to sort elements; may be null if elements are Comparable
    public final Comparator<K> cmp;  


    {
        super(new ArrayList<K>(), new ArrayList<V>());
        cmp = new MyComparator<K>();
    }

    // Use the given comparator to sort the keys

        //super(new ArrayList<K>(), new ArrayList<V>());
        this.cmp = cmp;
    }


    {
        if(!(key instanceof Comparable) && cmp == null)
            throw new RuntimeException("The key is not instance of Comparable or comparator object is null");
    }

    public int indexOf(K key) 
    {
        int foundIndex = Collections.<K>binarySearch(keys, key);

        return foundIndex;
    }

    public int compareTo(K otherKey) 
    {
        int result = 0;
        for(int i = 0; i < keys.size(); i++)
        {
            result = ((Comparable<K>) keys.get(i)).compareTo(otherKey);
        }
        return result;
    }

MyComparator 类

import java.util.Comparator;



    @Override
    public int compare(K key1, K key2)
    {
        return -1;
    }

}

最佳答案

你的问题是FastGetListMM<K, V>正在实现 Comparable<K>但是那个Collections.<K>binarySearch(list, value)期待一个 Comparable<K>列表 .

K应该实现 Comparable<K> , 不是 FastGetListMM .如果你想使用 Collections.<K>binarySearch(keys, key)你需要FastGetListMM实现List<Comparable<K>>而不是 Comparable<K> - 并确保 FastGetListMM 中的所有项目升序排列。

关于java - binarySearch 实现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29983036/

相关文章:

java - 从 Frege 调用 native Java 构造函数

c++ - 如何仅使用一个键来使用 std::binary_search ?

mysql - Ruby on Rails、ActiveRecord、二分搜索

c++ - 使用二进制搜索查找数字第 N 次出现的索引

c++ - 无法正确实现upper_bound()

java - 为什么等待/通知没有发生在这里?

java - java中cloneable接口(interface)有什么用?

c - 如何检查一个数组中的特定字符串是否在另一个数组中

java - 如果 java 类具有另一个用户定义类的成员变量,我们如何使其不可变?

java - 有没有办法在 Play! 中使用 MyBatis?框架?