Using ListIterator to move back and forth over a LinkedList in Java

前端 未结 3 738
甜味超标
甜味超标 2021-02-18 17:26

I have a LinkedList over which I need to iterate back and forth multiple times. I am using it to keep track of a series of pages in a workflow that will be created dynamically.

3条回答
  •  萌比男神i
    2021-02-18 17:56

    ListIterator was designed to behave this way. See the conversation beneath ShyJ's answer for the rationale.

    I find this behavior to be beyond idiotic, and have instead written a very simple alternative. Here's the Kotlin code with a extension function for ArrayLists:

    class ListIterator(var list: ArrayList) : Iterator {
    
        private var cursor: Int = 0
    
        fun replace(newList: ArrayList) {
            list = newList
            cursor = 0
        }
    
        override fun hasNext(): Boolean {
            return cursor + 1 < list.size
        }
    
        override fun next(): E {
            cursor++
            return current()
        }
    
        fun hasPrevious(): Boolean {
            return 0 <= cursor - 1
        }
    
        fun previous(): E {
            cursor--
            return current()
        }
    
        fun current(): E {
            return list[cursor]
        }
    
    }
    
    fun  ArrayList.listFlippingIterator() = ListIterator(this)
    

    If you wish to include removal functionality, I highly recommend writing the API to explicitly instruct the iterator if it should remove left or right, e.g. by defining those methods as removeNext() and removePrevious().

提交回复
热议问题