Возникли проблемы при создании собственного итератора для класса коллекций - PullRequest
1 голос
/ 09 декабря 2010

Я получаю сообщение об ошибке «Итератор не может быть преобразован в тип». Я пытаюсь взять класс хранения и добавить код, необходимый для реализации класса коллекций Java. Я не думаю, что мне разрешено импортировать Iterator, я думаю, что мне нужно сделать свой собственный.

public class storage {
    private Object[] data = new Object[256];
    // Don't allow access to anything not yet stored
    private int nextEmptySlot = 0;
    private int i=0;
    public Object begin(){
        return data[0];
    }
    public Object end(){
        return data[nextEmptySlot];
    }

    //class Iterator() {
        // public Storage data;
    //}

    public Iterator iterator() {

        // returns a class that iterates over the data array
        return new Iterator() {
            public Object remove(){
                for(int j=i+1 ; j<=nextEmptySlot-1 ; j++) {
                    this.data[j-1] = this.data[j];
                }
                return (this.data.data[i]);
            }

            public int hasNext(){
                if(this.data.data[i+1] != null) return 1;
                else return 0;
            }

            public Object next(){
                i++;
                if (hasNext()==1){
                    return this.data.data[i];
                }
                else if (hasNext()==0){
                    throw UnsupportedOperationException();       
                }
                return this;
            }
        };
    }
}

Ответы [ 2 ]

4 голосов
/ 09 декабря 2010

Вам нужно import java.util.Iterator;

1 голос
/ 09 декабря 2010

Этот код даже не неправильный; посмотрите методы Iterator:

http://download.oracle.com/javase/1.4.2/docs/api/java/util/Iterator.html

Ваш Iterator не реализует интерфейс java.util.Iterator; использование того же имени не делает его одним.

Посмотрите на ваш метод:

public int hasNext()

java.util.Iterator hasNext() возвращает логическое значение.

Это совершенно неправильно.

...