为什么,System.out.println(s.toString()+" fjjj"没输出?

package set;

import java.util.ArrayList;
import java.util.ListIterator;

public class Lesson7 {
    public static void main(String[] args) {
        /*
        * ArrayList
        * 数组结构的实现,查询快,增删慢
        * 运行效率快,线程不安全
        * Vector  与ArrayList类似 数组结构的实现,查询快,增删慢
        * 运行效率慢,线程安全
        *
        * LinkedList:  链表结构实现,增删快,查询慢
        *
        * */
        //创建ArrayList
        ArrayList arrayList = new ArrayList<>();
        Lesson3Student s1 = new Lesson3Student("刘德华", 42);
        Lesson3Student s2 = new Lesson3Student("郭富城",54);
        Lesson3Student s3 = new Lesson3Student("梁朝伟",53);
        arrayList.add(s1);
        arrayList.add(s2);
        arrayList.add(s3);

        //使用列表迭代器从后往前遍历元素
        ListIterator listIterator = arrayList.listIterator(); //创建迭代器
        while (listIterator.hasPrevious()) {
            Lesson3Student s = (Lesson3Student) listIterator.previous();
            System.out.println(s.toString()+" fjjj");
        }//previousIndex()从后往前返回下标,previous()从后往前返回元素,并向前查找

    }
}
package set;

public class Lesson3Student {
    private String name;
    private int age;

    public Lesson3Student() {
    }

    public Lesson3Student(String name, int age) {
        this.name = name;
        this.age = age;
    }

    @Override
    public String toString() {
        return "Lesson3Student{" + "name='" + this.name + ", age=" + this.age + '}';
    }

    @Override   //给Lesson7用的重载方法
    public boolean equals(Object obj) {
//        判断是否为空
        if (obj == null) {
            return false;
        }
//        判断是否是同一个对象
        if (this == obj) {
            return true;
        }
//        判断是否为同一个类型
        if (obj instanceof Lesson3Student) {
            Lesson3Student s =  (Lesson3Student)obj;
            // 判断属性是否相等
            if (this.name == s.getName()&&this.age == s.getAge()){
                return true;
            }

        }
        return false;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }
}

 

hasPrevious()指的是前面有没有元素,因为你创建listIterator()是从零开始的,循环开始的时候hasPrevious是空的,所以循环直接结束。

你想做的应该是从后往前输出

所以要把迭代器设置到最后面

改成

ListIterator listIterator = arrayList.listIterator(arrayList.size()); //创建迭代器,并且指定迭代器位置为最后一位


 

可以换一种方式,使用Collections.reverse(arrayList);将列表反序后再使用以下方式

while(listIterator.hasNext()){
    listIterator.next()
}

 

这个判断条件listIterator.hasPrevious()为false,根本不会进入这个循环,要想实现从后往前输出,首先要从前往后输出,楼主需要明白迭代器的原理。

运行结果: