How to implement iterator as an attribute of a class in Java

后端 未结 6 953
既然无缘
既然无缘 2020-12-17 04:19

let\'s say I have this simple MyArray class, with two simple methods: add, delete and an iterator. In the main method we can see how it is supposed to be used:



        
6条回答
  •  感动是毒
    2020-12-17 04:47

    In my opinion it is better to implement MyArray as common Iterable object, so it can be used in a for statement.

    My suggestion:

    /**
     * My array
     */
    public class MyArray implements Iterable
    {
        /**
         * Internal used iterator.
         */
        private class MyArrayIterator implements Iterator
        {
            private MyArray _array;
    
            /**
             * @param array The underlying array.
             */
            public MyArrayIterator(MyArray array)
            {
                this._array = array;
            }
    
            /**
             * Gets the underlying array.
             * 
             * @return The underlying array.
             */
            public MyArray getArray() {
                return this._array;
            }
    
            @Override
            public boolean hasNext() {
                // TODO Auto-generated method stub
                return false;
            }
    
            @Override
            public TItem next() {
                // TODO Auto-generated method stub
                return null;
            }
    
            @Override
            public void remove() {
                // TODO Auto-generated method stub
    
            }
    
        }
    
        public void add(int el){
            // do add
        }
    
        public void delete(){
            // do delete
        }
    
        @Override
        public Iterator iterator() {
            // TODO Auto-generated method stub
            return new MyArrayIterator(this);
        }
    }
    

    As I said you can use it in a for statement:

    private static void test(MyArray strArray)
    {
        for (String str: strArray) {
            // do something
        }
    }
    

提交回复
热议问题