繁体   English   中英

使用映射值对Java列表进行排序

[英]Sorting Java List using Map Values

我有一张Map和一张List List应基于Map键值进行排序。 例如:

Map = (<2,"Andy">,<4,"Karl">)
List = ("Kathy","Andy","Yiri","Jun","Karl")

我必须对List进行排序,以使index((2:Andy)在那,而index(4:Karl)在那。 对于其余元素,顺序无关紧要。 其余条件为:

  1. Map中的条目可能会出现在列表中,也可能不会出现在List中;(这样我们可以保持顺序不变)
  2. 列表可能为空
  3. 地图可能是空的

我能够在2个循环中执行此操作,我很好奇是否可以在单个循环中实现此操作。

您可以使用1循环遍历地图中的所有键,并使用indexOf(Object)在List中搜索indexOf(Object) ,然后使用set两次将对象交换到正确位置。

伪代码(看起来像Java):

Set<Map.Entry<Integer, String>> entrySet = map.entrySet();
for (Map.Entry<Integer, String> e: entrySet) {
    int index;
    if ((index = list.indexOf(e.getValue())) >= 0 && index != e.getKey()) {
        list.set(index, list.set(e.getKey(), e.getValue()));
    }
}

好吧,复杂性不是那么好:O(nk)其中n是List中的元素数,k是Map中的元素数。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM