我是java的新手,所以我有一些“烦人”的问题。我有一个类Employee,其中包含int idNumber
和int phone number
。然后我按LinkedList<Employee>
排序idNumber
。我想更改某个idnumber
的电话号码。
我一直在与Iterators合作,但我不知道我做得对,我怀疑。
public void setNewPhoneNumber(int idnumber, int newphone){
Iterator<IndexC> it = listEmployee.iterator();
IndexC employeeTemp = null;
boolean found = false;
while(it.hasNext() && !found){
employeeTemp = it.next();
if(employee.getIdNumber()== idnumber){
employeeTemp.setNewPhoneNumber(newphone);
found = true;
}
}
}
是的,我知道employee.setNewPhoneNumber
是错的,但我不知道哪种方法可以改变链表上的值。 (抱歉英语不好,不是母语人士)
答案 0 :(得分:2)
迭代器很痛苦; foreach构造更好:
public void setNewPhoneNumber(int idnumber, int newphone) {
for (Employee employee : listEmployee)
if (employee.getIdNumber() == idnumber) {
employee.setNewPhoneNumber(newphone);
return;
}
}
我不清楚IndexC是什么,我不经常使用LinkedList - 这里可能会有一些微妙之处 - 但我觉得你最好避免使用迭代器。
答案 1 :(得分:1)
for(IndexC employeeTemp: employeeTemp){}
setPhoneNubmer()
方法完成的,但它完全取决于IndexC
类是否有这样的方法。看看那个班的定义。答案 2 :(得分:0)
不工作的一个原因是列表中没有满足(employee.getIdNumber()== idnumber)的IndexC。
也许您应该发布一些额外的代码,例如,创建该列表的位置,是否填充了任何内容?
此外,什么是不起作用的?设置新电话号码,还是从列表中检索元素?
在这两种情况下,我认为你应该发布两种方法,即
getIdNumber();
正如Mike B.所说,也许使用Map实现会更好。由于您正在考虑订单,因此SortedMap(例如TreeMap)实现可能会更好。
在任何情况下,rember都必须覆盖IndexC中的两个方法(使用地图时)。否则,事情会变得混乱。
答案 3 :(得分:0)
我的不好,IndexC是员工类,“糟糕的复制过去”抱歉。我不喜欢LinkedList,但我必须使用+5000条目(学校练习)。我不认为使用这么多的条目是建议的。 这个类是set的,get的,克隆..
class Manager{
private LinkedList<Employee> listE = new LinkedList<Emploee>;
public void setNewPhoneNumber(int idnumber, int newphone)
}
答案 4 :(得分:-1)
http://java.sun.com/j2se/1.4.2/docs/api/java/util/LinkedList.html
你想使用带有int递增的for循环,直到找到你想要的对象。然后你想使用listEmployee.get()来获取你想要的对象并进行编辑。
但是,如果您需要随机访问此类项目,则不应使用Linkedlists。请将其粘贴在ArrayList中。这有更好的随机访问时间。
作为旁注,如果id号从0开始按顺序排列,你甚至不需要for循环。您只需listEmployee.get(idNumber)
即可