Nope. Iterator<?>
итерации более ?
s (некоторый тип, который происходит от Object
), в то время как Iterator
предоставляет только Object
s. Это поддержка дженериков в Java.
Что такое ?
? Ну, это отличный вопрос.
В старые добрые времена перед Java 5 у вас были нетипизированные коллекции и нетипизированные итераторы. Таким образом, у вас будет Object
s в ваших коллекциях, и вам придется вручную их вручную. Например:
List foo = new ArrayList();
foo.add("Foo!");
for(Iterator i = foo.iterator(); i.hasNext();)
{
Object element = i.next();
System.out.println((String)element);
}
Обратите внимание, что литье? Это потому, что мы просто набиваем Object
s в списки, и мы должны делать все это домашнее хозяйство. Не так уж плохо, всего лишь List
, но представьте себе карту, содержащую карту, содержащую карту, содержащую ... ну, вы получаете идею. Вы бросаете ад, и вы можете довольно быстро не знать, смотрите ли вы на карту, которая идет от String
до Integer
или другую карту, которая идет назад от Integer
до String
.
В Java 5, вы можете использовать дженерики, так что теперь вы можете сказать:
List<String> foo = new ArrayList();
foo.add("Foo!");
for(Iterator<String> i = foo.iterator(); i.hasNext();)
{
String element = i.next();
System.out.println(element);
}
Обратите внимание, что приведение не было необходимости? Когда мы используем List<String>
, мы можем использовать Iterator<String>
и иметь некоторую безопасность типов.
Это действительно полезно, когда вы начинаете делать вещи с более сложными структурами данных, как:
Map<String, Map<String, Map<String, SomeRandomObject>>> complexMap;
@ruakh: К сожалению, пытался найти подобный вопрос и не знал, как это слово. Спасибо за ссылку. – Bober02
Не нужно извиняться.Единственная причина, по которой я мог найти этот вопрос, это то, что я уже знал, что ответ был «сырыми типами». Я отметил это как дубликат, чтобы указать вам на замечательные ответы там, вместо того, чтобы критиковать ваш вопрос о дублировании этого. – ruakh