次のforループがあります
ArrayList<User> userList;
for(User user:userList){
....
}
使用している現在の obj のインデックスを取得するにはどうすればよいですか? 通常のfor(int i...)
ループに変更することもできますが、これは非生産的です。
ありがとう。
for(int i...)
インデックスを使用する場合は、使用するのが完全に理にかなっています。
このような独自のカウンターを使用する必要があります
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);
}
別のカウンターを使用できます。
int index = 0;
for (User user: list) {
//use index
index++;
}
しかし、正直なところ、インデックスが必要な場合は、単純な古い for ループを使用する方がおそらく簡単です。
for (int i = 0; i < list.size(); i++) {
User user = list.get(i);
}
このタイプのループはforeachループと呼ばれます。コレクション要素を反復処理するため、実際にはインデックスはありません。反復子を持つベクトルのようなものです (C++ で stl を知っている場合)。
あなたが言った通常の for ループ ( for (int i = 0 ... ) ) は、必要に応じてインデックスを提供します
残念ながら、これを使用するか、カウンターを使用して for ループを使用する必要があります。他に方法はありません。
int index = 0;
for(User user:userList){
....
index++;
}