Java 中用于序列检索的复杂地图问题

A complex map issue in Java for sequence retrieval

真正的问题是我有一个序列 B C D A E ,现在我将它插入到地图中,如上面的代码所示。现在我的工作是在 java 中以相同的顺序检索原始序列。面试无法回答。很想知道解决方案。

初始序列:B C D A E

Map map = new map();
map.put(C, D);
map.put(B, C);
map.put(A, E);
map.put(D, A);

请求序列:B C D A E

你的问题有问题,你有一个映射,它是一个键值对。这意味着您最多只能 return 4 个元素, 而不是 5.

假设您从 B 开始并按字母顺序移动。您将遍历键 B, C, D, A 并得到 C, D, A, E.

的结果

为此,您将创建一个基于地图的迭代器,并在找到键 B 后开始将项目添加到链表中,在此之前的任何内容都不会输入。当您将值添加到链接列表时,您还会将它们从迭代器中删除。

当第一个循环完成所有 4 个键时,它将在链接列表中具有 C, D, A,并且由于您删除了之前的所有元素,地图现在的大小为 1。在这一点上,您可以保证按字母顺序排列,因此您可以再次遍历列表,但将剩余的项目添加到链接列表中。这将产生一个包含 C, D, A, E 的链表。迭代器很便宜。但是 没有办法 得到 B C D A E 因为你只有 4 个元素。所以如果这真的是你被问到的问题。

告诉他们在给定 4 个元素的映射时不可能取回 5 个元素。

public static void main(String[] args) {
    Map<String, String> map = new HashMap<String, String>();
    map.put("C", "D");
    map.put("B", "C");
    map.put("A", "E");
    map.put("D", "A");
    printMap(map);
}

public static void printMap(Map<String, String> mp) {
    LinkedList<String> ll = new LinkedList<String>();
    Iterator it = mp.entrySet().iterator();

    String keyStart = "B";
    while (it.hasNext()) {
        Map.Entry pair = (Map.Entry)it.next();
        String key = (String) pair.getKey();
        if (!key.equals(keyStart)) {
            continue;
        }else{
            ll.add((String) pair.getValue());
            it.remove();
        }
    }
    Iterator it2 = mp.entrySet().iterator();
    while (it2.hasNext()) {
        Map.Entry pair = (Map.Entry)it2.next();
        String key = (String) pair.getKey();
        ll.add((String) pair.getValue());
        it2.remove();
    }
    System.out.println(ll);
}