0

我尝试使用以下方法迭代 Tile() 类的 Treemap:

Map map = new TreeMap();

Iterator itr = world.map.values().iterator();

while(itr.hasNext()){
     Tile t = ???;
     System.out.print(t.xCord+","+t.yCord+","+t.zCord);
}

如何在迭代器中获取对象 Tile 的实例?或者,如果有更好的方法,请告诉我。

我试过用谷歌搜索这个,但我总是在寻找遍历纯数据的方法,比如字符串等,而不是类的实例化......

4

6 回答 6

2
Tile t = (Tile) itr.next();

但请注意,使用迭代器,尤其是原始集合是一种非常过时的 Java 编写方式。使用类型化集合和增强的 for 循环会更好:

Map<String, Tile> map = new TreeMap<String, Tile>();

for(Tile t : map.values()){
     System.out.print(t.xCord+","+t.yCord+","+t.zCord);
}
于 2011-09-05T16:14:36.313 回答
2

字符串不是 Java 中的纯数据,它们是对象,所以也是一样的:

Map map = new TreeMap();

Iterator itr = world.map.values().iterator();

while(itr.hasNext()){
    Tile t = (Tile)itr.next();
    System.out.print(t.xCord+","+t.yCord+","+t.zCord);
}

或更好:

Map<Key, Tile> map = new TreeMap<Key, Tile>();

Iterator<Tile> itr = world.map.values().iterator();

while(itr.hasNext()){
    Tile t = itr.next();
    System.out.print(t.xCord+","+t.yCord+","+t.zCord);
}

甚至更好:

Map<Key, Tile> map = new TreeMap<Key, Tile>();

for(Tile t : map.values){
    System.out.print(t.xCord+","+t.yCord+","+t.zCord);
}

psKey是您正在使用的关键对象的类

于 2011-09-05T16:14:43.523 回答
1

itr.next()给出下一个元素的实例,如javadocs中所指定。请注意,由于您的 Map 是原始类型,因此您将需要强制转换:Tile t = (Tile)itr.next();但它不是类型安全的。

更好的解决方案是使用@Simone 建议的泛型

于 2011-09-05T16:12:22.717 回答
0

在您使用的迭代器中

while(itr.hasNext()){
     Tile t = itr.next(); ...

但是,除非您使用泛型提供类型,否则您还必须投射瓷砖:

Map<Whatever,Tile> map = new TreeMap<Whatever,Tile>();
Iterator<Tile> itr = world.map.values().iterator();

否则迭代器值将不得不被强制转换 - 即你必须将你的示例(和上面的行)更正为

while(itr.hasNext()){
         Tile t = (Tile)itr.next(); ...
于 2011-09-05T16:13:09.037 回答
0

在循环内,itr.next()用于TileIterator. 目前这将返回一个Object,因为您使用的是 raw-typed TreeMap。而是使用TreeMap<Key, Tile>, 以便值迭代器将是Iterator<Tile>.

于 2011-09-05T16:13:50.233 回答
0

Tile t = (Tile) itr.next()

这将为您提供该类的下一个实例,并将迭代器移动到下一个实例。

于 2011-09-05T16:15:34.853 回答