根据升序时间存储在ArrayList中

时间:2018-04-11 03:53:17

标签: android list sorting

我目前的数据结构如下:

public class MyDataTemplate {

  long occurenceTime;
  int val1;
  int val2;

  public MyDataTemplate(Long nanoTime, int val1, int val2) {
    this.occurenceTime = nanoTime;
    this.val1 = val1;
    this.val2 = val2;
    }

}

List<MyDataTemplate> myData = new ArrayList <MyDataTemplate>();

上面的occurenceTime(long)表示我使用System.nanoTime()

在Android中获得的系统时间

如果数据按时间顺序到达,我可以很好地使用上述数据结构来存储数据到达时间:

newOccurence = new MyDataTemplate(System.nanoTime(), 42, 55)        
myData.add(newOccurence);

但是,由于数据没有按顺序到达,因此我可能会比旧的事件更早出现。

我的任务是确保myData包含按时间升序排列的数据,无论它何时到达。

我如何确保?

2 个答案:

答案 0 :(得分:4)

Froggy Oat ......

我做了一个尝试,似乎松散地说明了一个潜在的解决方案:&#34;

public class MainActivity extends AppCompatActivity {

    public class MyDataTemplate {


        long occurenceTime;
        int val1;
        int val2;

        public MyDataTemplate(Long nanoTime, int val1, int val2) {
            this.occurenceTime = nanoTime;
            this.val1 = val1;
            this.val2 = val2;
        }

    }

    class SortByNanoTime implements Comparator<MyDataTemplate> {

        public int compare(MyDataTemplate a, MyDataTemplate b) {
            if (a.occurenceTime < b.occurenceTime)
                return -1;
            else if (a.occurenceTime > b.occurenceTime)
                return +1;
            else
                return 0;
        }
    }

    List<MyDataTemplate> myData = new ArrayList<MyDataTemplate>();


    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        myData.add(new MyDataTemplate((long) 30000.2341, 2, 3));
        myData.add(new MyDataTemplate((long) 234234.234, 3, 4));
        myData.add(new MyDataTemplate((long) 11234234.234, 3, 4));
        myData.add(new MyDataTemplate((long) 4.234, 3, 4));

        Collections.sort(myData, new SortByNanoTime());

        for (MyDataTemplate tempVar : myData) {

            Log.i("XXX", "" + tempVar.occurenceTime);

        }


    }
}

答案 1 :(得分:0)

您将需要使用优先级队列或树集 - 由于您的时间戳是nanos,因此Comparator只是一个正常的Integer比较。