2016-02-19 108 views
0

在下面的示例中,我將元素添加到普通的ArrayList,然後添加到自定義的ArrayList。雖然前者正如預期的那樣很好地將每個元素添加到ArrayList,但後者似乎只是覆蓋了添加的元素。將元素添加到標準與自定義ArrayList

有人可以解釋一下這裏發生了什麼,以及如何解決它?

package jExample; 
import java.util.ArrayList; 

public class ForLoopArrayList { 

    public static void main(String[] args) { 

     // customized ArrayList 
     ArrayList<CDatabase> box = new ArrayList<>(); 

     // standard ArrayList 
     ArrayList<String> var1 = new ArrayList<>(); 
     ArrayList<String> var2 = new ArrayList<>(); 

     CDatabase recBox = new CDatabase(); 

     for(int i = 0; i < 9; i++){ 

      // populating customized ArrayList 
      recBox.var1 = i * 1.1; 
      recBox.var2 = i * 11.; 
      box.add(recBox); 

      // populating standard ArrayList 
      var1.add(Double.toString(i * 1.1)); 
      var2.add(Double.toString(i * 11.)); 
     } 

     for(int i = 0; i < var1.size(); i++){ 
     CDatabase test = box.get(i); 
     System.out.println(var1.get(i) + " " + var2.get(i) + " " + test.var1); 
     } 
     System.out.println(var1.size()); 
     System.out.println(box.size());  
    } 

} 

使用下面的CDatabase類:通過移動

package jExample; 

public class CDatabase { 

    public double var1; 
    public double var2; 

} 
+3

您不斷覆蓋您的CDatabase對象,每次嘗試創建一個新對象。 – Ceelos

+0

[爲什麼我的ArrayList包含添加到列表中的最後一項的N個副本?](http://stackoverflow.com/questions/19843506/why-does-my-arraylist-contain-n-copies-of -'-last-item-added-to-the-list) – Andreas

+0

*僅供參考*'ArrayList '不再是'定製'比'ArrayList '。它們都是標準ArrayList。定製'ArrayList'將意味着改變* list *的工作方式。 – Andreas

回答

1

正如我在評論中寫道,問題是,你把書同CDatabase對象,嘗試每次都創建一個新的對象,而不是CDatabase recBox = new CDatabase();裏面的for循環,例如:

CDatabase recBox; 

    for (int i = 0; i < 9; i++) { 
     recBox = new CDatabase(); 
     // populating customized ArrayList 
     recBox.var1 = i * 1.1; 
     recBox.var2 = i * 11.; 
     box.add(recBox); 

     // populating standard ArrayList 
     var1.add(Double.toString(i * 1.1)); 
     var2.add(Double.toString(i * 11.)); 
    } 


乾杯!

相關問題