for (ListIterator<E> it = listIterator(); it.hasNext(); ) VS for (ListIterator<E> it = list.listIterator(); it.hasNext(); )

for (ListIterator<E> it = listIterator(); it.hasNext(); ) VS for (ListIterator<E> it = list.listIterator(); it.hasNext(); )

有人能告诉我,代码的 for (ListIterator<E> it = listIterator(); it.hasNext(); ) 部分是否应该写成 for (ListIterator<E> it = list.listIterator(); it.hasNext(); ) 其中 list 是对 ArrayList 或 LinkedList class?两种形式都可以接受并且正确吗?我应该在哪里使用一个而不是另一个?

public int indexOf(E e) {
    for (ListIterator<E> it = listIterator(); it.hasNext(); )
        if (e == null ? it.next() == null : e.equals(it.next()))
            return it.previousIndex();
    // Element not found
    return -1;
}
for (ListIterator<E> it = listIterator(); it.hasNext(); )

此代码调用我自己 (this) 的 listIterator() 并使用它的 return 值。编写此代码的 class 有更高的机会 List 被执行。

for (ListIterator<E> it = list.listIterator(); it.hasNext(); )

此代码调用存储在 list 中的实例引用的 listIterator() 并使用其 return 值。这段代码可能到处都会出现写套路

两者都可以,但是是否正确应该取决于你想做什么。

会是这样的:

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

public class TestIndexOf<E> extends ArrayList<E> {
    private static final long serialVersionUID = 1L;

    @Override
    public int indexOf(Object e){
        for(ListIterator<E> it = listIterator(); it.hasNext();)
            if (e == null ? it.next() == null: e.equals(it.next()))
            return it.previousIndex();
        return -1;
    }

    public static void main(String[] args){

        TestIndexOf<String> ti = new TestIndexOf<>();
            ti.add("a");
            ti.add("b");
            ti.add("c");
            ti.add("d");

        System.out.format("The index of %s is %d\n", "b", ti.indexOf("b"));
    
    }
}