求助,map合并的问题
--------------------编程问答-------------------- 数据规模如何?数据规模小的真是遍历一下能实现功能就算了 --------------------编程问答-------------------- 规模不会很大,我估计顶多有4个,如何遍历?我试了半天没搞定 --------------------编程问答-------------------- 迭代遍历咯
先扫第一行,里面每个元素e都 map.get()
get到就新建个 map<e,get> 将e替换掉
再遍历get到的list的元素
做个List<List<Integer>> ited将已经遍历过的List记录,免得重复遍历作为值的List,这样就算我key值出现在value里又如何?我发现ited遍历过我就不会再遍历,不会死循环 --------------------编程问答-------------------- 兄弟,我搞定了。多谢。 --------------------编程问答-------------------- 主要还是数据结构的定义,我简单实现了下,看是否符合你的要求:
--------------------编程问答-------------------- 遍历一下能实现功能吗,也可百度下有关算法,如果对效率要求不是很严一般算法度可以百度到的,
package cn.pis.file;
import java.util.ArrayList;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
public class A {
public static void main(String args[]) {
map = new LinkedHashMap<Integer, Integer[]>();
map.put(11, new Integer[] { 12, 13, 14 });
map.put(14, new Integer[] { 15, 16 });
map.put(16, new Integer[] { 17, 18 });
map.put(18, new Integer[] { 20, 21 });
B b = mapToB(map);
//b:{11=[{12=null}, {13=null}, {14=[{15=null}, {16=[{17=null}, {18=[{20=null}, {21=null}]}]}]}]}
System.out.println(b);
}
static Map<Integer, Integer[]> map;
private static B mapToB(Map<Integer, Integer[]> map) {
// 假如你的数据具有某些特定意义,此处key按从小到大遍历
B b = new B();
b.key = map.keySet().iterator().next();
fill(b, map.get(b.key));
return b;
}
private static void fill(B b, Integer[] vs) {
List<B> children = new ArrayList<B>();
b.childern = children;
for (Integer v : vs) {
B child = new B();
child.key = v;
children.add(child);
if (map.containsKey(v)) {
fill(child, map.get(v));
}
}
}
}
class B {
Integer key;
List<B> childern;
public String toString() {
StringBuilder sb = new StringBuilder();
sb.append("{" + key + "=");
sb.append(childern).append("}");
return sb.toString();
}
}
补充:Java , Java SE