我有这个简单的方法:
public static Map<String, ArrayList<String>> szamolando = new HashMap<String,ArrayList<String>>();
ArrayList<String> outputs = new ArrayList<String>();
for(int i = 0;i<2;i++){
tombFeltolt("a"+i);
}
public void tombFeltolt(String kimenet) {
outputs.clear();
System.out.println("1");
outputs.add(min);
System.out.println("2");
outputs.add(max);
System.out.println("3");
outputs.add("65535");
szamolando.put(kimenet, outputs);
}
比我有这个输出:1 2 3 2
为什么我这样做?我的方法有什么问题?谢谢你的答案!
编辑: 好的,这是完整的代码:
public static Map<String, ArrayList<String>> szamolando = new HashMap<String, ArrayList<String>>();
static ArrayList<String> outputs = new ArrayList<String>();
static String min, max;
public static void main(String[] args) {
for (int i = 0; i < 2; i++) {
if (i == 0) {
min = "10";
max = "20";
} else {
min = "9";
max = "8";
}
tombFeltolt("a" + i);
}
for (String name : szamolando.keySet()) {
String key = name.toString();
String value = szamolando.get(name).toString();
System.out.println("ASS " + key + " " + value);
}
}
public static void tombFeltolt(String kimenet) {
outputs.clear();
System.out.println("1");
outputs.add(min);
System.out.println("2");
outputs.add(max);
System.out.println("3");
outputs.add("65535");
szamolando.put(kimenet, outputs);
}
这是我的输出:
ASS a0 [9,8,65535] ASS a1 [9,8,65535]
答案 0 :(得分:1)
这是您的问题的根源 当你清除它时,它将清除仍然引用现有ArrayList的ArrayList,它将清除存储的列表以及它已存储引用。 如果你想10,20,65535每次都使用新的列表。
outputs.clear();
答案 1 :(得分:1)
你必须改变这个:
static ArrayList<String> outputs = new ArrayList<String>();
到此:
static ArrayList<String> outputs = null;
并将此行放入“for”循环:
outputs = new ArrayList<String>();