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

Nun muss ich einzelne Iterator drucken Sa.using ich nicht in der Lage binWie man Sätze von Sets in Java drucken?

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

dies zu drucken ist nicht

Arbeits
+1

Das Drucken von 'int []' ist eine schwierige Zeit. Versuchen Sie, zu einer 'Liste ' zu wechseln. –

+1

Sie haben drei Schichten von Sätzen. Sie benötigen drei Iteratoren in drei verschachtelten Schleifen. Warum bestehen Sie darauf, nur einen Iterator zu verwenden? –

+0

Bitte nennen Sie Variablen nicht in Großbuchstaben - eine sehr schlechte Vorgehensweise. Großbuchstaben sind für Klassennamen reserviert. Verwenden Sie stattdessen CamelCase: [Java-Namenskonventionen] (https://www.google.com/webhp?sourceid=chrome-instant&ion=1&espv=2&ie=UTF-8#q=java%20naming%20conventions) – pczeus

Antwort

1

Zunächst einmal sollten Sie nicht primitive Datentypen wie int mit generischer Klasse sein. Also anstelle von int[]List<Integer> verwenden.

Nun, wenn Sie wirklich wollen, nur einIterator dann verwenden Sie eine Reihe von for-each Schleifen wie diese verwenden können -

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()); 
      } 
     } 
} 

Volltestcode -

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()); 
      } 
     } 
    } 
} 

Ausgang

[0, 1, 2, 3] 

[30, 31, 32, 33] 
+1

Danke, es funktioniert :) @ saif –

1

Hier ist sie, vorausgesetzt, Sie mehrere Ebenen auf Ihre Set haben Objekte und Ihr Array müssen Sie über jede Ebene iterieren.

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())); 
     } 
    } 
}