2016-06-13 48 views
0

如果我有優先級/順序排列項目的概念主列表:如何根據項目的主序列表對一小列項目進行排序?

1. dog 

2. cat 

3. fish 

4. bunny 

5. hamster 

另一份與價值觀

["bunny", "dog", "fish"] 

走來我怎麼排序基於主進入的列表清單?因此,在這個例子中,我期望第二個列表導致

["dog", "fish", "bunny"] 

它已被排序後。

我可以手動編寫一個函數來實現這一點,但我覺得Java已經有某種內置和優化的方式來做這種事情。在Java中完成這種類型的列表排序的最佳方式是什麼?

+0

相關http://stackoverflow.com/questions/18129807/in-java-how-do-you-sort-基於一個列表的另一個列表 – Tunaki

+0

使用TreeSet <>()。它也實現了Collection,比如ArrayList <>();你可以添加TreeSet到你的ArrayList。 TreeSet自動對字符串進行排序。 – LowLevel

回答

2

您可以做的是創建主副本,並使用List#retainAll方法保留主副本。

// Master list 
List<String> master = new ArrayList<>(Arrays.asList("dog", "cat", "fish", "bunny", "hamster")); 

// list to sort with respect to master  
List<String> listToSort = new ArrayList<>(Arrays.asList("bunny", "dog", "fish")); 

// copy of master 
List<String> masterCopy = new ArrayList<>(master); 

// keep only the items in masterCopy that are in the listToSort 
masterCopy.retainAll(listToSort); 

System.out.println(masterCopy); 

輸出

[dog, fish, bunny] 
2
  1. 進程列表成一張地圖,這樣masterList.get("bunny") = 4
  2. 寫自己的Comparator

    int compare(String a, String b) { 
        return masterList.get(a) - masterList.get(b); 
    } 
    

任何解決方案必須是O(在最大的項目#列表)在最壞的情況下,因爲你將不得不搜索整個大型列表只是爲了找到你正在排序的列表中的項目的位置。

相關問題