これはどのように機能するかではありません。i
クラスのlista
は、リスト内の場所のインデックスではありません。
まず、クラスを変更する必要があります。これは適切なコーディングではありません。
public class Friend {
//note1: Class Names Start With Capital Letter!
//note2: Class names have meaning!
private int i; //notice private modifier.
private String name; //notice private modifier.
public Friend (int i, String name)
{
this.i = i;
this.name = name;
}
/* getter and setter methods */
public int getI() {
return i;
}
public String getName()
return name;
}
public void setName(String name)
this.name = name;
}
/* don't forget equals() and hashCode() */
}
もちろん、適切な equals() および hashCode() メソッドは、それらを適切に処理できるようにするために不可欠です - しかし、ネット上にはこの主題に関する豊富な資料があります...
そのクラスを考えると、リストをトラバースして要素を見つける必要があります。
for(Friend friend: friends) {
if(&& friend.getI()==74) {
friend.setName("Cristina");
}
}
しかし、ここから、まだいくつかの改善点があります。カウルのアプローチは正しい方向に進んでいますが、次を使用して、さらに一歩進めMap<Integer, Friend>
ます。
//create Map
Map<Intger, Friend> friends = new HashMap<Integer, Friend>();
//note: use interface for declaring variables where possible to hide implementation specifics!
//add friends:
friends.put(75, new Friend(75,"a"));
//... left ot others for brevity
//modify part:
Friend f = friends.get(75);
if(f!=null) { //always check for null
f.setName("Christina");
}
カウルのアプローチと比較して、さらに何を得ることができますか? クラスにフィールドを追加したい場合はFriend
、すべてを変換する手間をかけずに自由に行うことができます...