2015-10-19 36 views
1

如果我有一个ArrayList这样的:如何维护一个ArrayList排序?

ArrayList<Integer> myList = new ArrayList<Integer>(); 

如果我想继续它有序,这将是更快地添加到它,然后在每次插入后打电话Collections.sort(myList),或简单地插入到位的元素?

+2

根据您使用它的方式,['SortedSet'](https://docs.oracle.com/javase/8/docs/api/java/ util/SortedSet.html)? – khelwood

+0

我想有其ID必须是在上升order.Here我为了不我觉得从smonff回答问题 – andrei985

+0

复杂整数使用,例如用户的列表(这是一个单独的类)是一个使最有意义的是:不要在固定的数据结构周围建立你的接口。相反,选择那个给你你需要的数据结构;而无需在其周围建立附加图层。 – GhostCat

回答

1

它可能是更有效的利用Collections.binarySearch(list, elementToInsert)在正确的位置插入,例如:

int index = Collections.binarySearch(list, element); 
if (index < 0) index = - (index + 1); 
list.add(index, element); 

如果您不需要随机访问和您的条目是唯一的(这似乎根据您的评论)的情况下,你也可以使用一个TreeSet:

NaivigableSet<User> users = new TreeSet<> (Comparator.comparing(User::getId)); 

设定将始终本着对用户ID必须是唯一的排序。

+0

如果我会用你的方法,我的'User'类必须实现'可比'和'比较 ',对吗? – andrei985

+0

@gusteru在第一个例子是,虽然如果需要的话,你可以提供自己的比较:'Collections.binarySearch(列表元素,Comparator.comparing(用户::的getId))'。在我的第二个例子中,我已经提供了基于ID,以便无需用户是在这种情况下,可比比较。 – assylias

0

如果您需要询问每个插入后连续分选,我想你应该尝试另一种方法比自己当前的一个,因为这不是时间效率。要详细解释可能的解决方案,您必须查看Sorted array list in Java