Skip to content

Commit d1e63e6

Browse files
committed
iterator修改
1 parent 0d55938 commit d1e63e6

File tree

1 file changed

+32
-17
lines changed

1 file changed

+32
-17
lines changed

java/basis/Collections-Framework.md

Lines changed: 32 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -48,30 +48,45 @@ public class IteratorExample {
4848

4949
}
5050
```
51-
**注意:**当使用Iterator对集合元素进行迭代时,Iterator并不是把集合元素本身传给了迭代变量,而是把集合元素的值传给了迭代变量(就如同参数传递是值传递,基本数据类型传递的是值,引用类型传递的仅仅是对象的引用变量),所以修改迭代变量的值对集合元素本身没有任何影响
51+
**注意:**当使用Iterator对集合元素进行迭代时,把集合元素的值传给了迭代变量(就如同参数传递是值传递,基本数据类型传递的是值,引用类型传递的仅仅是对象的引用变量。
5252

5353
下面的程序演示了这一点:
5454
```java
5555
public class IteratorExample {
56-
public static void main(String[] args){
57-
List<String> list =Arrays.asList("java语言","C语言","C++语言");
58-
Iterator<String> iterator = list.iterator();
59-
while(iterator.hasNext()){
60-
String next = iterator.next();//集合元素的值传给了迭代变量,仅仅传递了对象引用。保存的仅仅是指向对象内存空间的地址
61-
next ="修改后的";
62-
System.out.println(next);
63-
64-
}
65-
System.out.println(list);
66-
}
67-
56+
public static void main(String[] args) {
57+
List<MyObject> list = new ArrayList<>();
58+
for (int i = 0; i < 10; i++) {
59+
list.add(new MyObject(i));
60+
}
61+
62+
System.out.println(list.toString());
63+
64+
Iterator<MyObject> iterator = list.iterator();//集合元素的值传给了迭代变量,仅仅传递了对象引用。保存的仅仅是指向对象内存空间的地址
65+
while (iterator.hasNext()) {
66+
MyObject next = iterator.next();
67+
next.num = 99;
68+
}
69+
70+
System.out.println(list.toString());
71+
}
72+
static class MyObject {
73+
int num;
74+
75+
MyObject(int num) {
76+
this.num = num;
77+
}
78+
79+
@Override
80+
public String toString() {
81+
return String.valueOf(num);
82+
}
83+
}
6884
}
6985
```
7086
输出结果如下:
71-
>修改后的
72-
>修改后的
73-
>修改后的
74-
>[java语言, C语言, C++语言]
87+
>[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
88+
>
89+
>[99, 99, 99, 99, 99, 99, 99, 99, 99, 99]
7590
7691
下面具体介绍Collection接口的三个子接口Set,List,Queue。
7792
### 2.Set集合

0 commit comments

Comments
 (0)