更改链接列表中的参数

时间:2009-05-09 00:33:52

标签: java linked-list

我是java的新手,所以我有一些“烦人”的问题。我有一个类Employee,其中包含int idNumberint 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是错的,但我不知道哪种方法可以改变链表上的值。 (抱歉英语不好,不是母语人士)

5 个答案:

答案 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)

  • 您不是“更改链接列表中的参数”,而是尝试在列表中查找对象并更改该对象的属性
  • 您应该使用地图(例如 HashMap)而不是List,那么你 不必迭代。
  • 如果您进行迭代,请使用for循环:for(IndexC employeeTemp: employeeTemp){}
  • 更改手机号码通常是通过setPhoneNubmer()方法完成的,但它完全取决于IndexC类是否有这样的方法。看看那个班的定义。
  • 在提问时,请始终包含错误消息! “它不起作用”是一条非常无用的信息。

答案 2 :(得分:0)

不工作的一个原因是列表中没有满足(employee.getIdNumber()== idnumber)的IndexC。

也许您应该发布一些额外的代码,例如,创建该列表的位置,是否填充了任何内容?

此外,什么是不起作用的?设置新电话号码,还是从列表中检索元素?

在这两种情况下,我认为你应该发布两种方法,即

getIdNumber();

正如Mike B.所说,也许使用Map实现会更好。由于您正在考虑订单,因此SortedMap(例如TreeMap)实现可能会更好。

在任何情况下,rember都必须覆盖IndexC中的两个方法(使用地图时)。否则,事情会变得混乱。

  • 等于
  • 的hashCode

答案 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)

即可