本帖最后由 loveyoujava2008 于 2013-10-15 10:33:45 编辑

解决方案 »

  1.   

    迭代遍历咯
    先扫第一行,里面每个元素e都 map.get()
    get到就新建个 map<e,get> 将e替换掉
    再遍历get到的list的元素
    做个List<List<Integer>> ited将已经遍历过的List记录,免得重复遍历作为值的List,这样就算我key值出现在value里又如何?我发现ited遍历过我就不会再遍历,不会死循环
      

  2.   

    主要还是数据结构的定义,我简单实现了下,看是否符合你的要求: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();
        }
    }