Java 更改LinkedList中的参数

Java 更改LinkedList中的参数,java,linked-list,Java,Linked List,我是java新手,所以我有一些“恼人的”问题。我有一个班级雇员,其中包含一个int-idNumber和一个int-phone number。然后我有一个LinkedList按idNumber排序。我想更改某个idnumber的电话号码。 我一直在使用迭代器,但我不知道我是否做得对,我对此表示怀疑 public void setNewPhoneNumber(int idnumber, int newphone){ Iterator<IndexC> it = listEm

我是java新手,所以我有一些“恼人的”问题。我有一个班级雇员,其中包含一个
int-idNumber
和一个
int-phone number
。然后我有一个
LinkedList
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; 
                }
        }  
}
public void setNewPhoneNumber(int-idnumber,int-newphone){
迭代器it=listEmployee.Iterator();
IndexC employeeTemp=null;
布尔值=false;
而(it.hasNext()&&!found){
employeeTemp=it.next();
if(employee.getIdNumber()==idnumber){
员工临时设置新电话号码(新电话);
发现=真;
}
}  
}
是的,我知道
employee.setNewPhoneNumber
是错误的,但我不知道用哪种正确的方式更改linkedlist上的值。(很抱歉英语不好,不是以英语为母语的人)

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

您希望使用一个整数递增的for循环,直到找到所需的对象。然后,您需要使用listEmployee.get()获取所需的对象并对其进行编辑

但是,如果您需要对这样的项目进行随机访问,则不应使用LinkedList。将其粘贴到ArrayList中。它有更好的随机访问时间


作为一个补充说明,如果id号的顺序是从0到0,那么您甚至不需要for循环。您可以简单地列出employee.get(idNumber)

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

也许你应该发布一些额外的代码,例如,列表是在哪里创建的,你有没有用任何东西填充它

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

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

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

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

  • 相等于
  • 哈希码

迭代器是一种痛苦;foreach构造要好得多:

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

我不清楚IndexC是什么,而且我也不经常使用LinkedList-这里可能有一些微妙的地方我不知道-但我认为你最好避免使用迭代器。

我的错,IndexC是员工类,“过去的坏拷贝”对不起。我不喜欢LinkedList,但我必须将其用于+5000个条目(学校练习)。我不认为推荐使用有这么多条目的for。 该类为set's,get's,clone

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

public void setNewPhoneNumber(int idnumber, int newphone)
}
类管理器{
private LinkedList listE=新建LinkedList;
public void setNewPhoneNumber(int-idnumber,int-newphone)
}

这不管用吗?你有什么错误?为什么你认为它不起作用?listEmployee.get(idNumber)只有在至少包含idNumber元素的情况下才起作用。它将获得列表的idNumberth元素。对于随机访问,HashMap或TreeMap比ArrayList好得多。如果你想按键查找特定对象,那么你应该使用映射,而不是列表。另外,当在列表上迭代时,最好使用foreach循环,或者使用列表迭代器的其他方法,因为底层实现可以更有效地执行迭代。我认为应该有人澄清(好的,我会这样做)foreach构造是语法糖,迭代器在后面使用。是的,迭代器很好,只要我不需要看它们:-)你也可以使用break;如果你在一个功能的中间做这件事,那么我会回来,但我是一个只做一件事的小程序的狂热爱好者。如果我使用休息,那是因为我的日常工作是做两件(或更多)事情。