Java: тип итератора для цикла for - PullRequest
0 голосов
/ 04 марта 2012
ArrayList<LinkedList<TreeNode>> result = new ArrayList<LinkedList<TreeNode>>();

    for(LinkedList<TreeNode> entry : result) 

Почему результат цикла for равен LinkedList<TreeNode>, а не ArrayList<LinkedList<TreeNode>>?

Ответы [ 4 ]

1 голос
/ 04 марта 2012

Вы создаете ArrayList из LinkedList с, поэтому каждый элемент вашего ArrayList является LinkedList.Это то, что вы написали в своем цикле for: вы перебираете элементы ArrayList, то есть более LinkedList s.

И, кстати, избегайте написания конкретных классов в левой части присваивания, т.е.1009 *ArrayList<LinkedList<TreeNode>> result = new ArrayList<LinkedList<TreeNode>>(); должно быть записано как

List<List<TreeNode>> result = new ArrayList<List<TreeNode>>();

, теперь вы можете сказать:

for(List<TreeNode> entry : result)

Это более гибкий, потому чтоможет изменить вашу реализацию без изменения любого другого кода.

1 голос
/ 04 марта 2012

Линия

for(LinkedList<TreeNode> entry : result) 

будет читаться на английском языке как "Для каждого LinkedList<TreeNode> в result, делай ...". Переменная entry устанавливается на каждый LinkedList<TreeNode> из ArrayList, по одному за раз.

1 голос
/ 04 марта 2012

Тип элемента в каждом цикле - тот, который содержится в списке, поэтому он <LinkedList<TreeNode>. Вы получаете элемент в списке, а не часть списка или что-то ...

1 голос
/ 04 марта 2012

Поскольку тип цикла foreach относится к типу, который содержит коллекция.
Коллекция: result представляет собой ArrayList.
Содержит объекты типа LinkedList<TreeNode>.
Таким образом, этовведите внутри коллекции result, которую вы используете в цикле foreach.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...