我有班级名单A:
public class lista {
int i;
String name;
public lista(int i, String name)
{
this.i = i;
this.name = name;
}
}
我从这个类中创建了ArrayList。
public static ArrayList<lista> friends;
添加一些日期: 14 - 亚当 2 - 约翰 35 - 阿诺德 74 - x 54 - x
我希望获得IndexOf 74并将名称从x更改为Catrina。
怎么做?
friends.get(friends.indexOf(??)) = "catarina";
答案 0 :(得分:5)
看起来您最好使用Map
,因为它们能够更好地处理您在此处拥有的键值对。
Map<Integer, String> friends = new HashMap<Integer, String>();
friends.put(14, "Adam");
friends.get(14); //Adam
friends.put(14, "John");
friends.get(14); //Now John
答案 1 :(得分:0)
这不是它的工作原理。类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");
}
}
但是从这里开始,仍然有一些改进。 The approach of cowls方向正确,但我会更进一步,使用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
课程添加字段 - 你可以自由地做到这一点,而不必费心去处理所有事情......