【问题标题】:iterator for replacing list members in Java?用于替换 Java 中的列表成员的迭代器?
【发布时间】:2010-10-25 14:38:28
【问题描述】:

嗯...Java Iterator<T> 有一个remove() 方法,但没有replace(T replacement) 方法。

有没有一种有效的方法来替换列表中的选定项目?我可以使用 for 循环调用 get(i) 和 set(i),这对于 ArrayList 来说很好,但对于链表来说会很糟糕。

【问题讨论】:

  • 为什么不直接删除和插入?
  • 因为 java.util.Iterator 没有 insert() 方法(也不应该)

标签: java list iterator


【解决方案1】:

ListIterator.setList.listIterator()List.listIterator(int) 返回

set 对于 Set 迭代器来说没有任何意义。)

【讨论】:

    【解决方案2】:

    你需要一个ListIterator 而不是IteratorlistIterator() 给你一个)。然后使用set 方法。

    【讨论】:

      【解决方案3】:

      从 Java 8 开始还有 List.replaceAll(UnaryOperator<E> operator)

      这可能比使用ListIterator(默认实现)效率更高或更低,具体取决于您使用的列表类型以及需要替换的元素数量,因为它可以被覆盖以提供更好的性能但是您不能将其短路并退出中途(除非您抛出异常)。

      某些列表(如CopyOnWriteArrayList)不支持使用ListIterator 进行修改,但支持replaceAll

      另一个优点是replaceAll 使用 lambda 编写可能比使用带有迭代器的 for 循环更短。

      【讨论】:

        猜你喜欢
        • 2021-01-21
        • 2011-03-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多