Получение объектов в связанных списках и массивах в Java - PullRequest
2 голосов
/ 24 октября 2011

Хорошо, так что это, вероятно, вопрос для начинающих, но ...

Сейчас у меня есть объект с именем Person с методом setName

Я в своем основном классе иЯ объявил

List People = new LinkedList();

Что я хочу сделать, это просто вызвать функцию setName объекта в первой позиции.Я обнаружил, что это очень легко сделать при работе с массивом людей.Все, что я хотел бы сделать, это сказать

People[0].setName("steve");

Но так как он находится в списке ссылок, у меня возникли проблемы.

Я попытался использовать метод "get" следующим образом ...

People.get(0)

но тогда это не позволяет мне использовать мои определенные пользователем методы, поэтому я не могу установить имя.

Каков наилучший способ вывести объект из связанного спискаи получить доступ к его методам и переменным экземпляра?

заранее спасибо

Ответы [ 7 ]

7 голосов
/ 24 октября 2011

Вы хотите использовать дженерики, чтобы составить список людей:

List<Person> People = new LinkedList<Person>();

People.get(0).setName("steve");
4 голосов
/ 24 октября 2011

Использование генериков :

List<Person> people = new LinkedList<Person>();
// …
people.get(0).setName("steve");
3 голосов
/ 24 октября 2011

Вы должны использовать дженерики: List<Person>. Тогда вы сможете использовать people.get(0).setName(..)

Обратите внимание, что соглашение об именах Java требует, чтобы ваша переменная была в нижнем регистре.

2 голосов
/ 24 октября 2011

LinkedList подходит только тогда, когда вы хотите быстро выполнить итерацию по списку и когда вы хотите быстро добраться до первого или последнего элемента.Кроме того, вам нужно правильно определить people как LinkedList, чтобы иметь доступ к методам связанного списка, и вы должны напечатать свой список, так:

LinkedList<Person> people = new LinkedList<Person>();
people.getFirst().setName();

Однако, ArrayList лучшеобщий выбор, который обеспечивает хорошую производительность при доступе к элементам по их индексу, поэтому:

List<Person> people = new ArrayList<Person>();

затем

people.get(0).setName("fred");
2 голосов
/ 24 октября 2011

Вы не устанавливаете, какой тип объектов вы храните.Таким образом, вам нужно upcast:

Person person = (Person)People.get(0);
person.setName("steve");

или установить тип хранимых объектов:

List<Person> people = new LinkedList<Person>();
0 голосов
/ 12 февраля 2014

Вам необходимо определить Связанный список как Person LinkedList:

LinkedList<Person> people = new LinkedList<Person>();
people.get(0).setName("Steve");

Еще одно примечание (не о вопросе, просто для улучшения вашей Java): вы используете строчные буквы на первой букве имен переменных,из-за Java-соглашений и первой буквы любого последующего слова они пишутся с большой буквы;

float personsAge = 57.47;

ОБЪЯСНЕНИЕ (игнорировать, если скучно):

LinkedList не был настроен для хранения определенного типа переменной.Другим способом решения этой проблемы было бы:

LinkedList people = new LinkedList();
Person person = (Person) people.get(0);
person.setName("steve2")

Хотя вам придется делать это с каждым «человеком» в списке людей, побеждая точку LinkedList.

0 голосов
/ 24 октября 2011

Если вы используете Java 1.4 или более раннюю версию, вам нужно привести его к классу People:

((Person)People.get(0)).setName("SomeName");

Если вы используете Java 1.5 или более позднюю версию, используйте обобщенные значения:

List<Person> people = new LinkedList();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...