求助,map合并的问题 本帖最后由 loveyoujava2008 于 2013-10-15 10:33:45 编辑 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 迭代遍历咯先扫第一行,里面每个元素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(); }} 多线程访问全局变量 为什么出现~需要为 class、interface 或 enum错误 请教一下关于JAVA编写的日历,用控制台的形式显示。 JList的事件valueChanged()怎么老是执行两次啊??!! 讨论:重装系统后以前的jvm为什么就不能正常使用了,classpath设置无误 swt 例子的问题 table中单元格宽度设置问题 如何读入一文件? 关于变量 java实现聊天室求助 关于DefaultTableModel的addRow的问题 Java如何动态的调用方法,有很多方法参数和名字都不一样。有什么比较简单的方式动态调用吗?
先扫第一行,里面每个元素e都 map.get()
get到就新建个 map<e,get> 将e替换掉
再遍历get到的list的元素
做个List<List<Integer>> ited将已经遍历过的List记录,免得重复遍历作为值的List,这样就算我key值出现在value里又如何?我发现ited遍历过我就不会再遍历,不会死循环
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();
}
}