增强for与iterator循环遍历和修改数组和集合中的元素

增强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 测试结果分析

得到测试结果如下:

1163157884
1956725890
356573597
1735600054
21685669
=================================
1163157884名字是:关羽年龄是:25
1956725890名字是:张飞年龄是:26
356573597名字是:赵云年龄是:27
1735600054名字是:马超年龄是:28
21685669名字是:黄忠年龄是:29
=================================
1163157884名字是:刘备年龄是:30
1956725890名字是:刘备年龄是:30
356573597名字是:刘备年龄是:30
1735600054名字是:刘备年龄是:30
21685669名字是:刘备年龄是: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测试结果分析

得到测试结果如下:

1163157884
1956725890
356573597
1735600054
21685669
================================
1163157884名字是:关羽年龄是:25
1956725890名字是:张飞年龄是:25
356573597名字是:赵云年龄是:25
1735600054名字是:马超年龄是:25
21685669名字是:黄忠年龄是:25
======================================
1163157884名字是:刘备年龄是:30
1956725890名字是:刘备年龄是:30
356573597名字是:刘备年龄是:30
1735600054名字是:刘备年龄是:30
21685669名字是:刘备年龄是:30
======================================

通过测试结果可以看出,每个元素打印的hashcode值是相同的,所以,采用iterator方法同样是通过访问引用变量(指针)控制每个元素,所以通过引用变量可以修改每个对象中的内容。

3.总结

对于数组和集合元素的访问,采用增强for循环和iterator方法,都可以修改数组元素和集合中的值,因为传入方法中的是每个元素的变量引用,通过变量的引用修改对象中的内容。(这里for循环中和iterator中的对象引用只是原来对象引用的一份copy版本,因此如果修改的是该这个对象的引用变量是不会修改原来的数组和集合的,例如,将引用变量赋值为null时,重新输出数组和集合对象,对象和数组中的内容没有发生改变)

总的来说:通过增强for与iterator修改集合或者数组中的对象内容是可行的,但是修改集合或者数组的引用是不可行的,如果需要修改,则需要采用普通的for循环或者while循环。


                
  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值