Java - 维护对象集合的顺序

时间:2012-08-10 15:19:47

标签: java sorting collections

您将如何维护收集业务对象的订单

<BO1, BO2, BO3, BO4>

这样当你移除BO2时,你得到的是BO4

<BO1, BO3>

然后当你添加BO2

<BO1, BO2, BO3>

6 个答案:

答案 0 :(得分:3)

除非您使用排序顺序,否则我不知道该集合应该如何知道BO2应该在中间。

如果您的Business对象实现Comparable

,这将执行您想要的操作
SortedSet<BusObj> bos = new TreeSet<>();
bos.addAll(Arrays.asList(bo1, bo2, bo3, bo4));
bos.removeAll(Arrays.asList(bo2, bo4));
bos.add(bo2);

答案 1 :(得分:3)

您有多种方法可以做到这一点,但这取决于您要使用的集合类型。显然,您不希望维护插入顺序,而是基于列表中元素类型的顺序。

所以,在说这个或那个之前,请问自己以下问题:

我的收藏品可以包含重复的元素吗?

1)如果是:那么您可以使用List对象(ArrayListLinkedList等)的实现。但是你需要在每次插入后对列表进行排序:

List<MyObj> list = ...
list.add(myObjInstance);
Collections.sort(list);

为了避免在每次插入时对列表进行排序,您可以使用Apache Commons Collections中的TreeList实现。

2)如果上一个问题的答案为否。然后使用TreeSet,您不需要在每次插入时对该实现进行排序。

请注意,您的对象元素必须实现Comparable界面才能可排序

答案 2 :(得分:2)

制作业务对象Comparable并使用已排序的集合(例如TreeSet SortedSet)。

答案 3 :(得分:1)

答案 4 :(得分:0)

有两个选项:使用List并通过插入适当的位置或使用已排序的集合自行进行排序。

我认为你想要的排序集合是SortedSet http://docs.oracle.com/javase/6/docs/api/java/util/SortedSet.html

SortedSet需要条目来实现Comparable接口。

您还应该看一下另一个问题:Sorted collection in Java

答案 5 :(得分:0)

解答我的问题:

我想如果对随机访问不感兴趣,PriorityQueue也是一个解决方案。