2016-04-02 9 views
0
HashSet<Set<Set<int[]>>> Sa=new HashSet<Set<Set<int[]>>>(); 

現在,我需要打印Sa.using單一迭代器,我無法打印如何在java中打印一組套件?

Iterator<Set<Set<int[]>>> iter = Sa.iterator(); 
while (iter.hasNext()) { 
    System.out.println(iter.next()); 
} 

這是行不通的

+1

打印'int []'是個尷尬的時期。嘗試切換到「列表」。 –

+1

你有三層套。您需要三個嵌套循環內的三個迭代器。爲什麼你堅持只使用一個迭代器? –

+0

請不要用大寫來命名變量 - 這是一個非常糟糕的做法。大寫保留給類名稱。改爲使用CamelCase:[Java命名約定](https://www.google.com/webhp?sourceid=chrome-instant&ion=1&espv=2&ie=UTF-8#q=java%20naming%20conventions) – pczeus

回答

1

首先,你不應該使用Generic類的基本數據類型,如int。因此代替int[]使用List<Integer>

現在,如果你真的只是想用一個Iterator那麼你可以使用這樣的一羣for-each循環 -

for (Set<Set<List<Integer>>> aSa : Sa) { 
     for (Set<List<Integer>> bSa : aSa) { 

      Iterator<List<Integer>> iter = bSa.iterator(); 

      while(iter.hasNext()) { 
       System.out.println(iter.next()); 
      } 
     } 
} 

完整的測試代碼 -

HashSet<Set<Set<List<Integer>>>> Sa = new HashSet<>(); 

    // Creating dummy data 

    // Two List of Integers 
    List<Integer> listInt1 = new ArrayList<>(); 
    List<Integer> listInt2 = new ArrayList<>(); 

    // Populating the list 
    for (int i = 0; i < 4; i++) { 
     listInt1.add(i); 
     listInt2.add(i+30); 
    } 

    // Data structure of Sa. 
    Set<List<Integer>> setOfIntLists1 = new HashSet<>(); 
    Set<List<Integer>> setOfIntLists2 = new HashSet<>(); 

    setOfIntLists1.add(listInt1); 
    setOfIntLists1.add(listInt2); 

    setOfIntLists2.add(listInt2); 
    setOfIntLists2.add(listInt1); 

    Set<Set<List<Integer>>> setOfset1 = new HashSet<>(); 
    Set<Set<List<Integer>>> setOfset2 = new HashSet<>(); 

    setOfset1.add(setOfIntLists1); 
    setOfset1.add(setOfIntLists2); 

    setOfset2.add(setOfIntLists2); 
    setOfset2.add(setOfIntLists1); 

    // Adding data to Sa 
    Sa.add(setOfset1); 
    Sa.add(setOfset2); 

    for (Set<Set<List<Integer>>> aSa : Sa) { 
     for (Set<List<Integer>> bSa : aSa) { 

      Iterator<List<Integer>> iter = bSa.iterator(); 

      while(iter.hasNext()) { 
       System.out.println(iter.next()); 
      } 
     } 
    } 
} 

輸出

[0, 1, 2, 3] 

[30, 31, 32, 33] 
+1

謝謝,它很有用:)@賽富 –

1

這,假設你有多個層級的Set對象和你的數組,你必須遍歷每個級別。

Iterator<Set<Set<int[]>>> iter = Sa.iterator(); 
Iterator<Set<int[]>> innerIter; 
Iterator<int[]> deepIter; 
while (iter.hasNext()) { 
    innerIter = iter.next().iterator(); 
    while(innerIter.hasNext()){ 
     deepIter = innerIter.next().iterator(); 
     while(deepIter.hasNext()){ 
      System.out.println(Arrays.toString(deepIter.next())); 
     } 
    } 
}