我目前的数据结构如下:
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()
如果数据按时间顺序到达,我可以很好地使用上述数据结构来存储数据到达时间:
newOccurence = new MyDataTemplate(System.nanoTime(), 42, 55)
myData.add(newOccurence);
但是,由于数据没有按顺序到达,因此我可能会比旧的事件更早出现。
我的任务是确保myData
包含按时间升序排列的数据,无论它何时到达。
我如何确保?
答案 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比较。