2015-10-19 73 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