有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

arraylist定义Java中用户定义类的二进制搜索

我定义了一个用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中,并使用集合对其进行排序。排序(d1)。(这里是数据类型对象的数组列表)。但我面临的问题是如何使用这些收藏。binarySearch在此ArrayList上查找特定元素的索引。当我尝试使用它时,我得到一条错误消息,binarySearch不能用于此数据类型。有人能帮忙吗


共 (2) 个答案

  1. # 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);
        }
    
    }
    
  2. # 2 楼答案

    下面是一个关于如何做到这一点的例子

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