1

我是java新手,所以我遇到了一些“烦人”的问题。我有一个 Employee 类,其中包含一个int idNumber和一个int phone number. 然后我有一个LinkedList<Employee>排序依据idNumber。我想更改某个电话号码idnumber。我一直在使用迭代器,但我不知道我是否做得对,我对此表示怀疑。

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是错的,但我不知道哪种正确的方法可以改变链表上的值。(抱歉英语不好,不是母语人士)

4

5 回答 5

2

迭代器很痛苦;foreach 结构要好得多:

public void setNewPhoneNumber(int idnumber, int newphone) {
        for (Employee employee : listEmployee)
                if (employee.getIdNumber() == idnumber) {
                    employee.setNewPhoneNumber(newphone);
                    return; 
                }
}

我不清楚 IndexC 是什么,而且我不经常使用 LinkedList - 我在这里可能遗漏了一些微妙之处 - 但我认为你最好避免使用迭代器。

于 2009-05-09T01:02:23.803 回答
1
  • 您不是“更改链接列表中的参数”,而是尝试在列表中查找对象并更改该对象的属性
  • 您应该使用 Map(例如 HashMap)而不是 List,这样您就不必迭代了。
  • 如果您进行迭代,请使用 for 循环:for(IndexC employeeTemp: employeeTemp){}
  • 更改电话号码通常会通过一个setPhoneNubmer()方法来完成,但这完全取决于IndexC类是否有这样的方法。看看那个类的定义。
  • 提出问题时,请始终包含错误消息!“它不起作用”是一个非常无用的信息。
于 2009-05-09T00:45:02.097 回答
0

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

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

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

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

getIdNumber();

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

在任何情况下,请记住您必须覆盖 IndexC 中的两个方法(使用地图时)。否则,事情会变得一团糟。

  • 等于
  • 哈希码
于 2009-05-09T00:55:23.587 回答
0

我的错,IndexC 是 Employee 类,“糟糕的复制过去”对不起。我不喜欢 LinkedList,但我必须将它与 +5000 个条目一起使用(学校练习)。我认为不建议使用 for 有这么多条目。类作为集合,获取,克隆..

class Manager{
private LinkedList<Employee> listE = new LinkedList<Emploee>;

public void setNewPhoneNumber(int idnumber, int newphone)
}
于 2009-05-09T01:25:11.253 回答
-1

http://java.sun.com/j2se/1.4.2/docs/api/java/util/LinkedList.html

你想使用一个 int 递增的 for 循环,直到你找到你想要的对象。然后您想使用 listEmployee.get() 来获取您想要的对象并对其进行编辑。

但是,如果您需要随机访问此类项目,那么您不应该使用链接列表。将其粘贴在 ArrayList 中。这有更好的随机访问时间。

附带说明一下,如果 id 编号从 0 开始排列,您甚至不需要 for 循环。你可以简单地 listEmployee.get(idNumber)

于 2009-05-09T00:47:07.583 回答