Java中有序对象的最佳列表实现?

时间:2014-03-19 20:25:51

标签: java

我的情况是我目前有一个预约'预约'具有以下属性的对象:

'患者' '日期' '类型'

所需的唯一功能是遍历此LinkedList并按照' date'的顺序显示每个约会。因此,每次创建一个新的约会时(使用名为' addAppointment'在与约会的LinkedList相同的类中),该方法将使用比较器对链接列表进行排序。

然而,我想知道这是不好的做法,是否有更好的方法来做到这一点?我永远不需要得到预约'对象的索引,那么使用优先级队列会更好吗?

3 个答案:

答案 0 :(得分:1)

到目前为止,我不同意这里的所有人,并说继续使用一个简单的ArrayList。您的主要用例是循环遍历列表并按顺序显示,对吧?您可以使用Collections.sort()方法对数组列表进行排序,该方法将对实现Comparable的任何对象列表进行排序。因此,只需在Appointment对象中实现Comparable(只需要提供.compareTo()方法...... API可以很好地解释这一点,或者收集Java Trail),然后您的排序将变得轻松而轻松。我的经验是,这比TreeSet或LinkedList这样的对象表现更好。

现在,如果你总是插入列表的中间位置会有更好的表现,但是你似乎主要是从你所说的那样读取这个列表,所以去找ArrayList。

答案 1 :(得分:0)

一般来说,在需要随机访问时使用ArrayList,在有大量插入和删除时使用LinkedList。如果您需要一个保持排序的数据结构,PriorityQueue是一个选项,但它确实适用于您只是顺序关闭顶部元素的情况。如果您需要重复迭代元素,请使用SortedSet

如果元素排序中涉及的字段在插入任何已排序的集合后发生更改,则应删除并重新添加该元素(最好在修改之前删除)。

答案 2 :(得分:0)

使用PriorityQueue

compareTo对象编写Appoitnment方法,根据日期指定自然顺序。

PriorityQueue<Appointment> schedule = new PriorityQueue<Appoitnment>();
Appointment a1 = new Appointment();
Appointment a2 = new Appointment();
schedule.add(a1);
schedule.add(a2);

// Iteratively removes the earliest appointment remaining in the schedule
while (schedule.peek != null) {
  System.out.println(schedule.poll().toString());
}