2017-05-28 64 views
-1

所以基本上我试图编写自己的自定义迭代器来打印ArrayList的每第二个数字。我使用从0到100的整数填充arraylist。自定义迭代器打印ArrayList的每个第二个成员

但不知怎的,它仍然没有使用我的自定义迭代器,奇怪地打印出我的arrayList中的每一个int。

我接近这个错误的方式吗? 代码:

public class IteratorTesting implements Iterable{ 
    ArrayList<Integer> rand; 

    public IteratorTesting(){ 
     rand = new ArrayList<>(); 
    } 

    public ArrayList<Integer> getRand(){ 
     return rand; 
    } 

    public int getSize(){ 
     return rand.size(); 
    } 

    @Override 
    public Iterator iterator() { 
     return new MyIterator(); 
    } 

    public class MyIterator implements Iterator<Object>{ 
     int currentIndex=0; 

     @Override 
     public boolean hasNext() { 
      if(currentIndex<rand.size()){ 
       return true; 
      }else{ 
       return false; 
      } 
     } 

     @Override 
     public Object next() { 
      return rand.get(currentIndex+=2); 
     } 

    } 

    public static void main(String[] args) { 
     IteratorTesting name = new IteratorTesting(); 
     for (int i = 0; i < 100; i++) { 
      name.getRand().add(i); 
     } 
     Iterator it = name.getRand().iterator(); 
     while(it.hasNext()){ 
      System.out.println(it.next()); 
     } 
    } 

} 

输出:

run: 
0 
1 
2 
3 
4 
5 
6 
7 
8 
9 
10 
11 
12 
13 
14 
15 
16 
17 
18 
19 
20 
21 
22 
23 
24 
25 
26 
27 
28 
29 
30 
31 
32 
33 
34 
35 
36 
37 
38 
39 
40 
41 
42 
43 
44 
45 
46 
47 
48 
49 
50 
51 
52 
53 
54 
55 
56 
57 
58 
59 
60 
61 
62 
63 
64 
65 
66 
67 
68 
69 
70 
71 
72 
73 
74 
75 
76 
77 
78 
79 
80 
81 
82 
83 
84 
85 
86 
87 
88 
89 
90 
91 
92 
93 
94 
95 
96 
97 
98 
99 

回答

3

在此行中

Iterator it = name.getRand().iterator(); 

你获取的IteratorArrayList,而不是您的自定义迭代器。所以你只是以常规的方式迭代列表。

+0

但我重写了迭代器对象。 @Override public Iterator iterator(){ return new MyIterator(); } – Frisco

+1

不,你没有。你已经在'IteratorTesting'类中覆盖了它,但不是在它内部的'ArrayList'对象上。 –

+0

name.iterator()代替 –