2015-10-14 71 views
2

我想打印出嵌套的ArrayList。作爲Java初學者,我無法在循環中做到這一點。 我的第二個問題是找出嵌套的ArrayList-Objects的大小。 「.size()」不起作用。如何打印出嵌套的Arraylist對象並確定它們的大小

在此先感謝。

這裏是我的代碼:

package java_lernen; 

import java.util.*; 

public class Java_lernen { 

    public static void main(String[] args) { 

     Dataset ds = new Dataset(); 
     List<Dataset> db = new ArrayList<>(); 

     ds.setName("Hans"); 
     ds.setItem("Hans_one"); 
     ds.setItem("Hans_two"); 
     db.add(ds); 

     ds.setName("Helga"); 
     ds.setItem("Helga_one"); 
     ds.setItem("Helga_two"); 
     ds.setItem("Helga_three"); 
     db.add(ds); 

     System.out.println(db.size()); // size of database 

     System.out.println(db.get(0).getItem(0)); 
     System.out.println(db.get(0).getItem(1)); 
     System.out.println(db.get(0).getItem(2)); 
     // Q1: How can i do this (above) in a loop? 

     /* pseudo-code, because i have no idea how to do that! 

     for (??? elem: Dataset){ 
      sout (size of dataset) 
     } 
     */ 
     //Q2: How to find out the size of the nested Arraylist(s) 
     //.size() doesn't seem to work 
    } 
} 

而且

class Dataset { 

    private String name; 
    final ArrayList<String> arrayItem; 

    public Dataset() { 
     arrayItem = new ArrayList<>(); 
    } 

    public String getName() { 
     return name; 
    } 

    public void setName(String _name) { 
     this.name = _name; 
    } 

    public void setItem(String _item) { 
     arrayItem.add(_item); 
    } 

    public String getItem(int _nr) { 
     String s = arrayItem.get(_nr); 
     return s; 
    } 

} 

回答

0

你有一個非常誤導的星座。但是,每個循環看起來像這樣

for(DataSet dataSet : db){ 
    System.out.println(dataSet.arrayItem.size()); 
    for(String s : dataSet.arrayItem){ 
     System.out.println(s); 
    } 
} 
0

添加一個新的方法在你所謂的getSize

public int getSize(){ 
return arrayItem.size(); 
} 
+0

有時解決方案是那麼明顯,你只見樹木不見森林。謝謝 –

+0

您的歡迎:D – zawhtut

0

DataSet類可以在DataSet類爲添加一個方法getArrayItem()而不是使用的dataSet.arrayItem直接並可以使用@Murat K.建議的代碼。

它看起來像下面那樣。

public List<String> getArrayItem(){ 
    return arrayItem; 
} 

而且,所需的代碼將通過以下修改:

for(DataSet dataSet : db){ 
    System.out.println(dataSet.getArrayItem().size()); 
     for(String s : dataSet.getArrayItem()){ 
      System.out.println(s); 
     } 
} 

希望這會有所幫助。

0

在您的Dataset類中添加一個Collectionarray作爲成員。

class Dataset<E> { 

    private List<E> items; 

    public Dataset() { 
     items = new ArrayList<>(); 
    } 

    public List<E> getItems() { 
     return this.items; 
    } 

    // ... other members and getter/setters 
} 

代碼進行迭代,並得到大小

Dataset<Integer> dataSet = new Dataset<>(); 
    for (Integer in : dataSet.getItems()) { 
     //Iterate 
    } 
    System.out.println("Size " + dataSet.getItems().size()); 
0

下面是你需要的完整代碼。

package stackOverFlow; 

import java.util.*; 

public class Java_lernen { 

public static void main(String[] args) { 

    Dataset ds = new Dataset(); 
    Dataset ds1 = new Dataset(); 
    List<Dataset> db = new ArrayList<Dataset>(); 

    ds.setName("Hans"); 
    ds.setItem("Hans_one"); 
    ds.setItem("Hans_two"); 
    db.add(ds); 

    ds1.setName("Helga"); 
    ds1.setItem("Helga_one"); 
    ds1.setItem("Helga_two"); 
    ds1.setItem("Helga_three"); 
    db.add(ds1); 

    System.out.println(db.size()); // size of database 

    // Q1: How can i do this (above) in a loop? 

    /* pseudo-code, because i have no idea how to do that! 


    */ 

    for (Dataset dss : db) { 
     System.out.println(dss.getName()); 
     for (int i = 0; i < dss.getSizeDataset(); i++) { 
      System.out.println("\t" + dss.getItem(i)); 
     } 
    } 

    //Q2: How to find out the size of the nested Arraylist(s) 
    System.out.println(db.get(0).getSizeDataset()); 
    System.out.println(db.get(1).getSizeDataset()); 

} 

}

class Dataset { 

private String name; 
final ArrayList<String> arrayItem; 

public Dataset() { 
    arrayItem = new ArrayList<String>(); 
} 

public String getName() { 
    return name; 
} 

public void setName(String _name) { 
    this.name = _name; 
} 

public void setItem(String _item) { 
    arrayItem.add(_item); 
} 

public String getItem(int _nr) { 
    String s = arrayItem.get(_nr); 
    return s; 
} 

public int getSizeDataset() { 
    return arrayItem.size(); 
} 

} 
+0

您可以解釋您的答案,以便更好地瞭解您的代碼如何幫助解決問題 –

+0

您是否發現使用ds = new Dataset()的缺點?而不是宣佈另一個數據集? (Dataset ds = new Dataset(); Dataset ds1 = new Dataset(); –

+0

當我們不斷更新ds對象時,名稱將被覆蓋在現有名稱上,新項目將被添加到舊列表中。 )name1,item1,item2 SET-2)name2,item1-1,item1-2然後如果我們只使用一個ds,那麼輸出將是name2,item1,item2,item1-1,item1-2。這裏的要求是列表清單。所以我們可以認爲這個清單總是新的。 –