arraylist loading给我有趣的输出

时间:2013-11-26 18:17:01

标签: java loops arraylist

我有这个简单的方法:

    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]

2 个答案:

答案 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>();