|
2 | 2 | // https://docs.oracle.com/javase/8/docs/api/java/util/Iterator.html
|
3 | 3 |
|
4 | 4 | classPeekingIteratorimplementsIterator<Integer> {
|
5 |
| -IntegernextElement; |
6 |
| -Iterator<Integer>iterator; |
| 5 | +privateIterator<Integer>iterator; |
| 6 | +privateIntegertopElement; |
| 7 | + |
7 | 8 | publicPeekingIterator(Iterator<Integer>iterator) {
|
8 | 9 | // initialize any member here.
|
9 | 10 | this.iterator =iterator;
|
10 |
| -updateNext(); |
11 |
| - } |
12 |
| - |
13 |
| -privatevoidupdateNext() { |
14 |
| -nextElement =iterator.hasNext() ?iterator.next() :null; |
| 11 | +populateTopElement(); |
15 | 12 | }
|
16 |
| -
|
| 13 | + |
17 | 14 | // Returns the next element in the iteration without advancing the iterator.
|
18 | 15 | publicIntegerpeek() {
|
19 |
| -returnnextElement; |
| 16 | +returnthis.topElement; |
| 17 | + } |
| 18 | + |
| 19 | +// hasNext() and next() should behave the same as in the Iterator interface. |
| 20 | +// Override them if needed. |
| 21 | +@Override |
| 22 | +publicIntegernext() { |
| 23 | +IntegernextValue =this.topElement; |
| 24 | +populateTopElement(); |
| 25 | +returnnextValue; |
| 26 | + } |
| 27 | + |
| 28 | +@Override |
| 29 | +publicbooleanhasNext() { |
| 30 | +returnthis.topElement !=null; |
| 31 | + } |
| 32 | + |
| 33 | +privatevoidpopulateTopElement() { |
| 34 | +this.topElement =this.iterator.hasNext() ?this.iterator.next() :null; |
20 | 35 | }
|
21 |
| - |
22 |
| -// hasNext() and next() should behave the same as in the Iterator interface. |
23 |
| -// Override them if needed. |
24 |
| -@Override |
25 |
| -publicIntegernext() { |
26 |
| -IntegerreturnValue =nextElement; |
27 |
| -updateNext(); |
28 |
| -returnreturnValue; |
29 |
| -} |
30 |
| - |
31 |
| -@Override |
32 |
| -publicbooleanhasNext() { |
33 |
| -returnnextElement !=null; |
34 |
| -} |
35 | 36 | }
|