您将如何维护集合业务对象的顺序
<BO1, BO2, BO3, BO4>
这样当您删除 BO2, amd BO4 时,您会得到
<BO1, BO3>
然后当你添加 BO2
<BO1, BO2, BO3>
您将如何维护集合业务对象的顺序
<BO1, BO2, BO3, BO4>
这样当您删除 BO2, amd BO4 时,您会得到
<BO1, BO3>
然后当你添加 BO2
<BO1, BO2, BO3>
除非您使用排序顺序,否则我看不出集合应该如何知道 BO2 应该放在中间。
如果您的业务对象实现 Comparable,这将满足您的需求
SortedSet<BusObj> bos = new TreeSet<>();
bos.addAll(Arrays.asList(bo1, bo2, bo3, bo4));
bos.removeAll(Arrays.asList(bo2, bo4));
bos.add(bo2);
您有几种方法可以做到这一点,但这取决于您要使用的集合类型。显然,您不想保持插入的顺序,而是要根据列表中元素的类型来保持顺序。
所以,在说使用这个或那个之前,问自己以下问题:
我的收藏可以包含重复的元素吗?
1)如果是:那么您可以使用List
对象的实现(ArrayList
,LinkedList
等)。但是您需要在每次插入后对列表进行排序:
List<MyObj> list = ...
list.add(myObjInstance);
Collections.sort(list);
为了避免在每次插入时对列表进行排序,您可以使用TreeList
Apache Commons Collections 中的实现。
2) 如果上一个问题的答案是否定的。然后使用 a TreeSet
,您不需要使用该实现对每次插入的集合进行排序。
请注意,您的对象元素必须实现Comparable
接口才能进行排序。
制作您的业务对象Comparable
并使用已排序的集合(例如TreeSet
a SortedSet
)。
有 2 个选项:使用 aList
并通过在适当的位置插入来自己进行排序,或者使用排序的集合。
我认为您想要的排序集合是SortedSet
http://docs.oracle.com/javase/6/docs/api/java/util/SortedSet.html。
SortedSet 需要条目来实现Comparable
接口。
您还应该查看另一个问题:Java 中的排序集合
回答我的问题:
如果有人对随机访问不感兴趣,我想 PriorityQueue 也是一种解决方案。