假设一个外部集合有以下两种方法:add(BusiessObject)
to end 和remove(BusinessObject)
. 现在,我知道我想要的对象的顺序,并且我想确保外部集合保持该顺序。所以,如果我从 BO1、BO2、BO3 开始,然后如果我删除 BO2 并再次添加它,我想确保顺序相同。
我正在考虑按照我想要的顺序保留我的当前项目列表,并且在每次插入时,我都会清除外部列表,然后从我的排序列表中添加所有元素。还有其他想法吗?
假设一个外部集合有以下两种方法:add(BusiessObject)
to end 和remove(BusinessObject)
. 现在,我知道我想要的对象的顺序,并且我想确保外部集合保持该顺序。所以,如果我从 BO1、BO2、BO3 开始,然后如果我删除 BO2 并再次添加它,我想确保顺序相同。
我正在考虑按照我想要的顺序保留我的当前项目列表,并且在每次插入时,我都会清除外部列表,然后从我的排序列表中添加所有元素。还有其他想法吗?
如果您无法控制外部集合,我认为您提出的解决方案就是方法。要使 Java 端集合保持有序,您无需继续调用 sort 方法,而只需使用有序集合(如TreeSet或TreeMap)或任何实现SortedSet或SortedMap的集合来存储数据。正如@AdelBoutros 所说,您仍然需要实现Comparable或Comparator 。
顺便说一句,我很好奇你的外部收藏。你能说它是什么吗?如果我们知道它是什么,也许我们可以用另一种方法思考。
java内置的集合排序有什么问题?
您只需让您的对象实现Comparable
接口和VOILA :)
也许在这里使用适配器模式会很合适。在您的情况下,创建一个实现 List 的类(或另一个更适合您的订购目的的集合)并拥有一个外部集合。在适配器的方法中,您可以按照自己的方式操作外部集合的元素。即使您使用的是您在问题中提到的想法,适配器也是一个很好的设计。
另一种方法是相反的。扩展外部集合并拥有一个 List/Queue/Set。因此,您的客户端代码将使用这个新的扩展类作为包装器。然后在您的列表中,您显然会使用排序和可比/比较器技术。