您将如何维护收集业务对象的订单
<BO1, BO2, BO3, BO4>
这样当你移除BO2时,你得到的是BO4
<BO1, BO3>
然后当你添加BO2
<BO1, BO2, BO3>
答案 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
对象(ArrayList
,LinkedList
等)的实现。但是你需要在每次插入后对列表进行排序:
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也是一个解决方案。