我已经定义了一个用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可以与此数据类型一起使用。有人可以帮忙。
答案 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)));
}
}