增强for与iterator循环遍历和修改数组和集合中的元素
来源:互联网 发布:淘宝达人怎么认证大v 编辑:程序博客网 时间:2024/05/21 08:03
增强for与iterator循环遍历和修改数组和集合中的元素
1.对于数组元素的遍历和修改
1.1 数组元素遍历的语法格式如下:
for(type variableName: array|collection){ //variableName 自动迭代访问每一个元素}
1.2 测试代码
首先定义一个普通的person类,并定义两个变量成员变量,定义构造方法以及set方法(),重写toString方法,代码如下
public class Person { public int age; public String name; public Person(int age, String name){ this.age = age; this.name = name; } public void setAge(int age) { this.age = age; } public void setName(String name) { this.name = name; } @Override public String toString() { return "名字是:"+this.name+"年龄是:"+this.age; }}
编写测试代码,首先定义一个person数组,并对数组中的元素进行初始化,然后采用增强for循环对数组中的元素进行遍历
public class Main { public static void main(String[] args) { /*初始化数组,并打印每个元素的hashcode*/ Person[] personList = new Person[5]; personList[0] = new Person(25,"关羽"); System.out.println(personList[0].hashCode()); personList[1] = new Person(26,"张飞"); System.out.println(personList[1].hashCode()); personList[2] = new Person(27,"赵云"); System.out.println(personList[2].hashCode()); personList[3] = new Person(28,"马超"); System.out.println(personList[3].hashCode()); personList[4] = new Person(29,"黄忠"); System.out.println(personList[4].hashCode()); System.out.println("================================="); /*采用增强for对数组进行遍历,并打印每个元素的hashcode值*/ for (Person person:personList){ System.out.println(person.hashCode()+person.toString()); } System.out.println("================================="); /*采用增强for循环对数组中每个元素进行遍历,并修改元素中的值*/ for (Person person:personList){ person.setAge(30); person.setName("刘备"); System.out.println(person.hashCode()+person.toString()); } System.out.println("================================="); }}
1.3 测试结果分析
得到测试结果如下:
11631578841956725890356573597173560005421685669=================================1163157884名字是:关羽年龄是:251956725890名字是:张飞年龄是:26356573597名字是:赵云年龄是:271735600054名字是:马超年龄是:2821685669名字是:黄忠年龄是:29=================================1163157884名字是:刘备年龄是:301956725890名字是:刘备年龄是:30356573597名字是:刘备年龄是:301735600054名字是:刘备年龄是:3021685669名字是:刘备年龄是:30=================================
测试结果分析: 通过最后的输出结果可以看到,通过直接输出,修改前的增强for循环输出,修改后的增强for循环输出,得到 的每个元素的hashcode是相同的,也就是说在采用增强for循环中对于每个元素的访问时采用的对象引用(指针)进行修改,通过对指针变量来修改内容,则修改的是对象中的内容。因此通过增强for可以修改对象的内容。
2. 对于集合元素的遍历和修改
2.1 集合元素遍历的语法与格式如下:
2.1.1 采用增强for进行遍历的语法格式
对于集合采用的语法格式与数组遍历是一样的
for(type variableName: array|collection){ //variableName 自动迭代访问每一个元素}
2.1.2 采用iterator方法进行遍历的语法格式
List<Object> objectList = new ArrayList();Iterator it = objectList.iterator();while(it.hasNext()){ Object obj = it.next();// 对集合中的元素进行遍历}
2.2 测试代码
同样,采用上面的person类作为进行呢测试,测试代码如下:
public class Main { public static void main(String[] args) { /*初始化集合元素,并将每个元素的hashcode值打印出来*/ List<Person> personList = new ArrayList<>(); Person p1 = new Person(25,"关羽"); System.out.println(p1.hashCode()); Person p2 = new Person(25,"张飞"); System.out.println(p2.hashCode()); Person p3 = new Person(25,"赵云"); System.out.println(p3.hashCode()); Person p4 = new Person(25,"马超"); System.out.println(p4.hashCode()); Person p5 = new Person(25,"黄忠"); System.out.println(p5.hashCode()); System.out.println("================================"); /*将元素添加到集合中*/ personList.add(p1); personList.add(p2); personList.add(p3); personList.add(p4); personList.add(p5); /*遍历元素,并将元素的hashcode打印出来*/ Iterator<Person> it1 = personList.iterator(); while (it1.hasNext()){ Person person = it1.next(); System.out.println(person.hashCode()+person.toString()); } System.out.println("======================================"); /*遍历元素,并将元素中的hashcode值与内容打印出来*/ Iterator<Person> it2 = personList.iterator(); while (it2.hasNext()){ Person person = it2.next(); person.setAge(30); person.setName("刘备"); System.out.println(person.hashCode()+person.toString()); } System.out.println("======================================");
}
}
2.3测试结果分析
得到测试结果如下:
11631578841956725890356573597173560005421685669================================1163157884名字是:关羽年龄是:251956725890名字是:张飞年龄是:25356573597名字是:赵云年龄是:251735600054名字是:马超年龄是:2521685669名字是:黄忠年龄是:25======================================1163157884名字是:刘备年龄是:301956725890名字是:刘备年龄是:30356573597名字是:刘备年龄是:301735600054名字是:刘备年龄是:3021685669名字是:刘备年龄是:30======================================
通过测试结果可以看出,每个元素打印的hashcode值是相同的,所以,采用iterator方法同样是通过访问引用变量(指针)控制每个元素,所以通过引用变量可以修改每个对象中的内容。
3.总结
对于数组和集合元素的访问,采用增强for循环和iterator方法,都可以修改数组元素和集合中的值,因为传入方法中的是每个元素的变量引用,通过变量的引用修改对象中的内容。(这里for循环中和iterator中的对象引用只是原来对象引用的一份copy版本,因此如果修改的是该这个对象的引用变量是不会修改原来的数组和集合的,例如,将引用变量赋值为null时,重新输出数组和集合对象,对象和数组中的内容没有发生改变)
总的来说:通过增强for与iterator修改集合或者数组中的对象内容是可行的,但是修改集合或者数组的引用是不可行的,如果需要修改,则需要采用普通的for循环或者while循环。
- 增强for与iterator循环遍历和修改数组和集合中的元素
- 使用迭代器Iterator和增强for循环如何遍历集合
- java集合与数组遍历-iterator和for方法
- for循环 增强for循环 iterator遍历集合的区别与用法
- 集合中的集合_存储和遍历(增强型for循环和迭代器)
- 用for循环和增强for循环遍历多维数组
- 增强for循环遍历数组集合
- Java中的增强for循环与iterator
- Android java程序员必备技能,集合与数组中遍历元素,增强for循环的使用详解及代码
- JAVA使用增强for循环和迭代器遍历Map集合
- Java使用增强for循环和迭代器遍历Map集合
- 使用增强for循环和迭代器遍历Map集合
- 关于 for循环和Iterator遍历
- 普通for循环和增强for循环处理数组元素的一个差别
- Java Iterator和增强for循环 for each详解
- 遍历数组 iterator方法和for方法
- 遍历数组 iterator方法和for方法
- 遍历数组 iterator方法和for方法
- HDU 2454 Degree Sequence of Graph G(Heavel定理)
- 矢量数据下载【道路路网(公路、铁路)、水系、建筑物轮廓、地名等等】
- 自建SE16N功能,修改数据库表数据
- SpirngBoot执行启动类后无法访问
- 设计模式之——组合设计模式
- 增强for与iterator循环遍历和修改数组和集合中的元素
- 什么是静态、动态、伪静态【转于百度知道的答案】
- Jmeter登录接口总是提示失败
- 自定义View之实现日出日落太阳动效
- Pointers on C——8 Arrays.11
- 解决tomcat下读取POST返回内容乱码问题
- Java设计模式-工厂模式
- 游戏简介
- android 图片的三级缓存(内存,sd卡,网络)