我有ArrayList
名为contains
。它包含具有许多属性的对象,如id号,大小和优先级。将足够的对象插入此ArrayList
后,我想删除ArrayList
中具有最高优先级的对象。
但问题是我不能通过索引来做到这一点。我不能简单地说contains.remove(index I know has highest priority)
因为索引会改变,我无法跟踪他们改变的内容。我需要一个循环或其他东西来查看数组列表并删除其中具有最高优先级的特定对象。
那么有没有办法查看ArrayList
中的对象,本例中的对象是任务,并从ArrayList
中删除优先级最高的对象?
答案 0 :(得分:1)
最方便的方法是迭代所有条目并保存优先级最高的条目,然后将其删除。
更好的想法是保持列表排序,这样你只需要删除第一个/最后一个元素。
答案 1 :(得分:1)
您实际上需要TreeSet
,但不是ArrayList
。
Comparable
创建对象,或为对象创建Comparator
。将您的比较逻辑基于priority
属性。TreeSet
。pollFirst()/pollLast()
。除此之外,请检查PriorityQueue
,也许它会让你更好。
主要思想是使用支持从框中排序的数据结构,基于您的比较实现。它将使您免于编写循环并使您的“以最高优先级删除”操作更快:O(logN)(TreeSet
)或甚至O(1)(PriorityQueue
),而不是O(N )(通过ArrayList
手动迭代)。