[英]How can I remove an ArrayList from an ArrayList of ArrayLists?
[英]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
很容易。
最好的選擇是不要編寫自己的分類器。 使用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.