Java中有序对象的最佳列表实现?
我目前的情况是,我有一个“约会”对象的LinkedList,这些对象具有以下属性:
“病人” “日期” “类型”
唯一需要的功能是循环浏览此LinkedList,并按“日期”顺序显示每个约会。因此,每次创建新约会时(使用与LinkedList of Appointment相同的类中名为“addAppointment”的方法),该方法都会使用比较器对链接列表进行排序
然而,我想知道这是否是一种不好的做法,是否有更好的方法来做到这一点?我永远不需要通过索引获取“约会”对象,所以使用优先级队列会更好吗
# 1 楼答案
一般来说,在需要随机访问时使用
ArrayList
,在需要大量插入和删除时使用LinkedList
。如果您需要一个保持排序的数据结构,PriorityQueue
是一个选项,但它确实适用于只按顺序提取顶层元素的场景。如果需要反复迭代这些元素,请使用SortedSet
如果元素排序中涉及的字段在插入到任何已排序的集合后发生更改,则应删除并重新添加该元素(最好在修改前删除)
# 2 楼答案
到目前为止,我不同意这里的每个人的观点,我会说,继续使用一个简单的ArrayList。您的主要用例只是循环浏览列表并按顺序显示,对吗?可以使用集合对数组列表进行排序。sort()方法,该方法将对任何对象列表进行排序。所以只需在约会对象中实现Comparable(只需要提供一个.compareTo()方法。。。API很好地解释了这一点,或者Java Trail on Collections),然后您的排序将变得轻松而轻松。我的经验是,这比TreeSet或LinkedList这样的对象性能更好
如果你总是在列表的中间插入很多内容,那么它们的性能会更好,但是你似乎主要是从你所说的内容中阅读这个列表,所以选择ArrayList
# 3 楼答案
使用
PriorityQueue
为
Appoitnment
对象编写一个compareTo
方法,根据日期指定自然顺序