Java问题迭代通过树图集合的类

时间:2011-09-05 16:10:34

标签: java iterator while-loop treemap

我试图使用:

遍历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的实例?或者如果有更好的方法,请告诉我。

我已经尝试使用谷歌搜索,但我总是最终想方设法迭代纯数据,比如字符串等,而不是类的'Instanciations'......

6 个答案:

答案 0 :(得分: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);
}

答案 1 :(得分: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);
}

p.s Key是您正在使用的关键对象的类

答案 2 :(得分:1)

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

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

答案 3 :(得分: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(); ...

答案 4 :(得分:0)

在循环中,使用itr.next()Tile中检索下一个Iterator对象。目前,这将返回Object,因为您使用的是原始类型的TreeMap。而是使用TreeMap<Key, Tile>,以便迭代器的值为Iterator<Tile>

答案 5 :(得分:0)

Tile t = (Tile) itr.next()

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