0

您将如何维护集合业务对象的顺序

<BO1, BO2, BO3, BO4>

这样当您删除 BO2, amd BO4 时,您会得到

<BO1, BO3>

然后当你添加 BO2

<BO1, BO2, BO3>
4

6 回答 6

3

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

如果您的业务对象实现 Comparable,这将满足您的需求

SortedSet<BusObj> bos = new TreeSet<>();
bos.addAll(Arrays.asList(bo1, bo2, bo3, bo4));
bos.removeAll(Arrays.asList(bo2, bo4));
bos.add(bo2);
于 2012-08-10T15:23:19.260 回答
3

您有几种方法可以做到这一点,但这取决于您要使用的集合类型。显然,您不想保持插入的顺序,而是要根据列表中元素的类型来保持顺序。

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

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

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

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

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

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

请注意,您的对象元素必须实现Comparable接口才能进行排序

于 2012-08-10T15:27:44.507 回答
2

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

于 2012-08-10T15:23:04.240 回答
1

使用排序集

http://docs.oracle.com/javase/7/docs/api/java/util/SortedSet.html

于 2012-08-10T15:22:52.453 回答
0

有 2 个选项:使用 aList并通过在适当的位置插入来自己进行排序,或者使用排序的集合。

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

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

您还应该查看另一个问题:Java 中的排序集合

于 2012-08-10T15:27:30.390 回答
0

回答我的问题:

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

于 2012-08-10T16:29:42.130 回答