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()を取得します。現在、raw-typed を使用しているため、これは を返します。代わりに を使用して、値イテレータが になるようにします。TileIteratorObjectTreeMapTreeMap<Key, Tile>Iterator<Tile>

于 2011-09-05T16:13:50.233 に答える
0

Tile t = (Tile) itr.next()

これにより、クラスの次のインスタンスが得られるだけでなく、イテレータが次のインスタンスに移動します。

于 2011-09-05T16:15:34.853 に答える