0

我有一个 Map和一个ListList应该根据键值进行排序Map。例如:

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

我必须以这样的方式对列表进行排序,即在 index : (2 : Andy) 应该在那里,并且在 index (4 : Karl) 应该在那里。对于其余元素顺序无关紧要。其余条件为:

  1. Map 中的条目可能会或可能不会出现在 List 中;(在此我们可以保持顺序相同)
  2. 列表可能为空
  3. 地图可能为空

我可以在 2 个循环中做到这一点,我很想知道是否有可能在一个循环中实现这一点。

4

1 回答 1

0

您可以使用 1 循环遍历映射中的所有键,并使用 搜索 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 中的元素数。

于 2012-06-12T02:07:22.903 回答