0

次のforループがあります

ArrayList<User> userList;
for(User user:userList){
    ....
}

使用している現在の obj のインデックスを取得するにはどうすればよいですか? 通常のfor(int i...)ループに変更することもできますが、これは非生産的です。

ありがとう。

4

5 に答える 5

3

for(int i...)インデックスを使用する場合は、使用するのが完全に理にかなっています。

于 2013-04-17T11:26:53.833 に答える
3

このような独自のカウンターを使用する必要があります

int counter = 0;
ArrayList<User> userList;
for(User user:userList){
    ....

counter++;
}

これは、java for each ループが、インデックス ベースの繰り返しに基づいていないイテレータに基づいているためです。実際、foreach ループは内部的に反復子を使用します。したがって、インデックスはありません。コレクションまたはリストの項目間を自動的に移動し、必要に応じて各項目への参照を取得します。

この画像を見る

ここに画像の説明を入力

このようにして、反復子はインデックスなしで各要素またはオブジェクトをトラバースします。forループのように。

またはあなたが使用することができます

User user = null;

for (int counter = 0; counter < userList.size(); counter++) {
   user  = userList.get(counter);
}
于 2013-04-17T11:29:20.907 に答える
2

別のカウンターを使用できます。

int index = 0;
for (User user: list) {
    //use index
    index++;
}

しかし、正直なところ、インデックスが必要な場合は、単純な古い for ループを使用する方がおそらく簡単です。

for (int i = 0; i < list.size(); i++) {
    User user = list.get(i);
}
于 2013-04-17T11:27:16.373 に答える
2

このタイプのループはforeachループと呼ばれます。コレクション要素を反復処理するため、実際にはインデックスはありません。反復子を持つベクトルのようなものです (C++ で stl を知っている場合)。

あなたが言った通常の for ループ ( for (int i = 0 ... ) ) は、必要に応じてインデックスを提供します

于 2013-04-17T11:29:42.797 に答える
1

残念ながら、これを使用するか、カウンターを使用して for ループを使用する必要があります。他に方法はありません。

int index = 0;
for(User user:userList){
    ....
    index++;
}
于 2013-04-17T11:27:18.223 に答える