在Java中为用户定义的类定义BinarySearch

时间:2014-03-28 10:05:48

标签: java arraylist

我已经定义了一个用Java存储GPS数据的类,如下所示:

class data implements Comparable
{
        float lati;
        float longi;
        int time; // Time in seconds 
        public int compareTo(Object obj)
        {
                data t = (data)obj;
                if(this.time == t.time)
                        return 0;
                if(this.time< t.time)
                        return -1;
                else
                        return 1;
        }
}

我已将所有数据存储在ArrayList中,我使用Collections.sort(d1)对其进行了排序。(这里是d1数据类型对象的ArrayList)。但我面临的问题是如何在此ArrayList上使用Collections.binarySearch来查找特定元素的索引。当我尝试使用它时,我收到的错误信息是binarySearch可以与此数据类型一起使用。有人可以帮忙。

2 个答案:

答案 0 :(得分:1)

可比较需要一个参数。尝试使用以下类:

class Data implements Comparable<Data> {

    float lati;
    float longi;
    Integer time;

    @Override
    public int compareTo(Data o) {
        // Integer already implements Comparable
        return time.compareTo(o.time);
    }

}

答案 1 :(得分:1)

这是一个如何做的例子。

import java.util.*;

class Data implements Comparable<Data>
{
    float lati;
    float longi;
    int time; // Time in seconds 

    public Data(int time) { this.time = time; }

    public int compareTo(Data obj)
    {
            if(this.time == obj.time)
                    return 0;
            if(this.time< obj.time)
                    return -1;
            else
                    return 1;
    }

    public static void main(String[] args) {
        ArrayList<Data> dataArray = new ArrayList<>();
        dataArray.add(new Data(3));
        dataArray.add(new Data(1));
        dataArray.add(new Data(2));

        Collections.sort(dataArray);
        System.out.println(Collections.binarySearch(dataArray,new Data(1)));
        System.out.println(Collections.binarySearch(dataArray,new Data(3)));
        System.out.println(Collections.binarySearch(dataArray,new Data(2)));
    }
}