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);
}
真正的问题是我有一个序列 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);
}