【问题标题】: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(); )
【发布时间】:2016-03-13 02:33:54
【问题描述】:

有人能告诉我,如果代码的 for (ListIterator&lt;E&gt; it = listIterator(); it.hasNext(); ) 部分应该改为 for (ListIterator&lt;E&gt; it = list.listIterator(); it.hasNext(); ) 其中 list 是对 ArrayList 或 LinkedList 类实例的引用?两种形式都可接受且正确吗?我应该在哪里使用一个而不是另一个?

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;
}

【问题讨论】:

    标签: java list iterator listiterator


    【解决方案1】:
    for (ListIterator<E> it = listIterator(); it.hasNext(); )
    

    此代码调用我自己的listIterator() (this) 并使用其返回值。编写此代码的类有更高的机会实现List

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

    此代码调用存储在list 中的实例引用的listIterator() 并使用其返回值。这段代码可能随处出现,用来编写例程。

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

    【讨论】:

    • 非常感谢您回答我的问题!我只是想知道您是否可以为我提供一个 for (ListIterator it = listIterator(); it.hasNext(); ) 的工作示例,我对如何使用它感到非常困惑。非常感谢您的帮助!
    【解决方案2】:

    应该是这样的:

    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"));
        
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-10-19
      • 2021-07-01
      • 1970-01-01
      • 1970-01-01
      • 2017-03-21
      • 2021-02-03
      • 2017-09-12
      相关资源
      最近更新 更多