【问题标题】:How do I sort a small list of items based on a master sequence list of items?如何根据项目的主序列列表对一小部分项目进行排序?
【发布时间】:2016-06-13 20:59:11
【问题描述】:

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

1. dog

2. cat

3. fish

4. bunny

5. hamster

另一个列表伴随着这些值

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

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

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

排序后。

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

【问题讨论】:

标签: java arrays algorithm list sorting


【解决方案1】:

您可以做的是创建一个 master 的副本并使用 List#retainAll 方法来保留 master 中的顺序。

示例:

// 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(最大列表中的项目数),因为您必须搜索整个大列表才能找到您正在排序的列表中项目的位置。

    【讨论】:

      猜你喜欢
      • 2019-02-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-09-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多