簡體   English   中英

數組列表 <Integer[]> 在Java中不起作用

[英]ArrayList<Integer[]> not working in java

我想用int[]作為對象創建一個arraylist

ArrayList<Integer[]> b= new ArrayList<Integer[]>();
    Integer[] a= new Integer[2];
    for(Integer i=0;i<20;i++){
        a[0]=i;
        a[1]=i;
        b.add(a);
    }
    for(int i=0;i<20;i++){
        System.out.println("line"+i+"= "+b.get(i)[0]+" "+b.get(i)[1]);
    }

我得到的結果是

在此處輸入圖片說明

而不是值(0 0 1 1等),似乎只保存了最后一個。 我也嘗試過使用int類型而不是Integer但結果相同

考慮在循環內初始化a ,否則您將一直在同一數組上進行寫入。 代替

ArrayList<Integer[]> b= new ArrayList<Integer[]>();
    Integer[] a= new Integer[2];
    for(Integer i=0;i<20;i++){
        a[0]=i;
        a[1]=i;
        b.add(a);
    }
    for(int i=0;i<20;i++){
        System.out.println("line"+i+"= "+b.get(i)[0]+" "+b.get(i)[1]);
    }

考慮一下:

ArrayList<Integer[]> b= new ArrayList<Integer[]>();
    for(Integer i=0;i<20;i++){
        Integer[] a= new Integer[2];
        a[0]=i;
        a[1]=i;
        b.add(a);
    }
    for(int i=0;i<20;i++){
        System.out.println("line"+i+"= "+b.get(i)[0]+" "+b.get(i)[1]);
    }

關鍵是每次循環迭代都需要創建一個新數組並存儲新值,而不是覆蓋現有值,就像您逐步執行代碼一樣,您可能會注意到您從未在循環內分配新數組。

您必須為要添加的每個元素聲明一個新數組。 否則,它們都引用相同的內存。 在for循環中而不是循環之前聲明數組。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM