如何根据主序列项列表对一小部分项目进行排序?

时间:2016-06-13 20:59:12

标签: java arrays algorithm list sorting

如果我有按优先级/顺序排序的项目的概念主列表:

1. dog

2. cat

3. fish

4. bunny

5. hamster

另一个列表带有值

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

如何根据主列表对传入列表进行排序?所以,在这个例子中,我希望第二个列表导致

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

经过分类后。

我可以手动编写一个函数来实现它,但我觉得Java已经有了某种内置和优化的方式来做这种事情。在Java中完成这种类型的列表排序的最佳方法是什么?

2 个答案:

答案 0 :(得分:2)

  1. 将列表处理为地图,以便masterList.get("bunny") = 4
  2. 使用

    编写自己的Comparator
    int compare(String a, String b) {
      return masterList.get(a) - masterList.get(b);
    }
    
  3. 在最坏的情况下,任何解决方案都必须是O(最大列表中的项目数),因为您必须搜索整个大型列表才能找到要排序的列表中项目的位置。

答案 1 :(得分: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]