簡體   English   中英

如何在每個ArrayList中按某個值有效地對ArrayList的ArrayList進行排序?

[英]How can I efficiently sort an ArrayList of ArrayLists by a certain value in each ArrayList?

我有一個ArrayList用於保存以下形式的ArrayList ...

[sally, carp, md]
[jim, smith, ny]
[frank, franklin, ca]

我希望通過內部ArrayList中的第三個參數(狀態)對外部ArrayList進行排序。 排序結果如下...

[frank, franklin, ca]
[sally, carp, md]
[jim, smith, ny]

有一種有效的方法可以做到這一點嗎?

我不會這樣做。

一個更好的主意可能是創建一個封裝名字,姓氏和狀態並具有List的對象。 完成后,使用Comparator很容易。

效率將取決於您的排序算法Big-Oh行為

最好的選擇是不要編寫自己的分類器。 使用Collections.sort()

https://docs.oracle.com/javase/tutorial/collections/interfaces/order.html

是的,使用Java8非常容易。 給定列表:

List<List<String>> list; //let's assume it's initialized

您可以使用以下內容按內部列表的第三個元素對外部列表進行排序:

list.sort(Comparator.comparing(l -> l.get(2)));

但是@duffymo是正確的,您可能想在域模型上創建適當的抽象。

假設您使用的是字符串數組列表的數組列表:

arrayList.sort((al1, al2) -> al1[2].compareTo(al2[2]));

這將創建一個lambda函數,該函數訪問第三個元素進行比較。

但是,正如@duffymo所說,您可能應該使用自定義類的數組列表,而不是數組列表的數組列表。 但是,您仍然必須為該類提供一個排序鍵,並且您將為該類編寫一個等效的lambda函數,以便對其進行排序。

編輯:評論復雜性。

另外,@ duffymo,我會根據要排序的字符串類為關鍵代碼選擇字符串排序算法。 不同的集合對排序算法的響應不同。 如果您選擇非比較算法,例如Burstsort ,Bucket排序和Radix排序(LSD和MSD兩種實現),那么利用字符串的結構,復雜度就可以隨大小線性變化。 任何默認的通用排序算法都使用比較(例如Python中的timsort),可以證明這種比較花費最少的 O(nlog(n))時間。 但是,nlog(n)的增長還是相當緩慢的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM