Изменение параметров в LinkedList - PullRequest
1 голос
/ 09 мая 2009

Я новичок в 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 неверно, но я не знаю, каким образом можно изменить значение в связанном списке. (Извините за плохой английский, не носитель языка)

Ответы [ 5 ]

2 голосов
/ 09 мая 2009

Итераторы - это боль; конструкция foreach намного лучше:

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

Мне неясно, что такое IndexC, и я не часто использую LinkedList - здесь может быть какая-то тонкость, которую мне не хватает - но я думаю, что вам лучше избегать итераторов.

1 голос
/ 09 мая 2009
  • Вы не «изменяете параметры в связанном списке», вы пытаетесь найти объект в списке и изменить свойство этого объекта
  • Вы должны использовать карту (например, HashMap) вместо списка, то вы не придется повторять.
  • Если вы выполняете итерацию, используйте цикл for: for(IndexC employeeTemp: employeeTemp){}
  • Изменение номера телефона обычно осуществляется с помощью метода setPhoneNubmer(), но полностью зависит от класса IndexC, имеет ли он такой метод. Посмотрите на определение этого класса.
  • При задании вопроса всегда включайте сообщения об ошибках! «Это не работает» - действительно бесполезная часть информации.
0 голосов
/ 09 мая 2009

мой плохой, IndexC - это класс Employee, извините за "плохую копию". Мне не нравится LinkedList, но я должен использовать его с +5000 записей (школьные упражнения). Я не думаю, что использование for с таким количеством записей рекомендуется. Класс как набор, получение, клоны ..

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

public void setNewPhoneNumber(int idnumber, int newphone)
}
0 голосов
/ 09 мая 2009

Одна из причин, по которой он не работает, заключается в том, что в списке нет IndexC, который удовлетворяет (employee.getIdNumber () == idnumber).

Может быть, вам следует опубликовать дополнительный код, например, где создан этот список, вы его чем-нибудь заполнили?

Кроме того, что не работает? Задание нового номера телефона или получение элемента из списка?

В обоих случаях я думаю, что вы должны опубликовать оба метода, то есть

getIdNumber();

Как говорит Майк Б., возможно, было бы лучше использовать реализацию Map. Поскольку вы рассматриваете порядок, возможно, реализация SortedMap (например, TreeMap) может быть лучше.

В любом случае, помните, вы должны переопределить два метода в вашем IndexC (при использовании карт). В противном случае все станет грязно.

  • равно
  • 1017 * хэш-код *
0 голосов
/ 09 мая 2009

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

Вы хотите использовать цикл for с инкрементом int до тех пор, пока не найдете нужный объект. Затем вы хотите использовать listEmployee.get (), чтобы получить нужный объект и отредактировать его.

Однако, если вам нужен произвольный доступ к таким элементам, вам не следует использовать списки ссылок. Вставьте его в ArrayList вместо этого. Это имеет намного лучшее время произвольного доступа.

В качестве примечания, вам даже не нужен цикл for, если номера идентификаторов расположены в порядке от 0 до чего угодно. Вы можете просто listEmployee.get (idNumber)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...