как инициировать итератор - PullRequest
       18

как инициировать итератор

4 голосов
/ 09 августа 2009

Я просто собираюсь инициализировать итератор по общему связанному списку, подобному этому (родовой тип T, кажется, здесь стерт, поскольку сайт интерпретирует его как тег)

public <T> LinkedList<T> sort(LinkedList<T> list){
    Iterator<T> iter = new list.iterator();
    ...

но я получил ошибку:

«список не может быть разрешен»

что не так?

Ответы [ 3 ]

12 голосов
/ 09 августа 2009

Удалите ключевое слово new:

Iterator<T> iter = list.iterator();
6 голосов
/ 09 августа 2009

Для дальнейшего уточнения правильного ответа Николая: вы пытаетесь создать новый объект класса list. Так что вы просто хотите позвонить list.iterator() (который где-то внутри себя сам делает new Iterator или что-то в этом роде и возвращает это вам).

Поскольку вы явно используете Java 5 или выше, тем не менее, лучше бы вместо

public <T> LinkedList<T> sort(LinkedList<T> list){
    Iterator<T> iter = new list.iterator();
    while (iter.hasNext()){
        T t = iter.next();
        ...
    }
}

вместо этого:

public <T> LinkedList<T> sort(LinkedList<T> list){
    for (T t : list){
        ...
    }
}

Еще лучше, не писать этот метод вообще, а вместо этого использовать

Collections.sort(list);
1 голос
/ 09 августа 2009

Слово, за которым следует новый оператор, должно быть именем класса. Здесь list.iterator () уже возвращает объект. Так что на этом этапе новое не нужно.

...