я могу создать ArrayList экземпляров определенного класса? - PullRequest
2 голосов
/ 08 января 2012

Я пытаюсь перейти на Java из C ++, и у меня возникли некоторые трудности.В C ++ я мог бы составить список конкретных экземпляров класса (например, список класса сотрудника, который будет включать имя, bday и т. Д.).В Java, однако, мне сложнее понять ту же функцию.В C ++ я бы использовал указатели на такие, в Java кажется, что предлагается использовать ArrayList.Однако создание списка массивов и подача ему экземпляров классов работает, но я не могу снова получить доступ к этим экземплярам классов.У меня на самом деле нет примеров кода, потому что сейчас я просто смотрю в правильном направлении и просто пробую.Поэтому любые предложения будут более чем приветствоваться.

Ответы [ 5 ]

3 голосов
/ 08 января 2012

Вы можете сделать это, используя дженерики:

List<Employee> employees = new ArrayList<Employee>();
employees.add(new Employee());
Employee employee = employees.get(0);

Ознакомьтесь с документацией ArrayList<E> и List<E>, которая является интерфейсом.

1 голос
/ 08 января 2012

Как уже отмечалось в других ответах, дженерики обеспечивают лучшее решение.

Однако вы также можете решить проблему старомодным способом с помощью явных типов типов;например,

List employees = new ArrayList();
employees.add(new Employee());
...
Employee employee = (Employee) employee.get(0);

Таким способом вы должны были решить эту проблему в Java до Java 1.5.


Кстати, код, сгенерированный компилятором Java, будет содержатьприведите инструкцию , даже если вы использовали дженерики ... как в версии кода Биньямина Шаре.

0 голосов
/ 08 января 2012

Кстати, в Java не обязательно использовать ArrayList. Если ваш размер известен, и вы хотите немного производительности, вы можете использовать Java-массивы.

Что касается указателей в C ++, в Java все (кроме примитивов, таких как int, float и т. Д.) Является ссылкой, аналогичной указателям в C ++.

Скажем, я использую массив в качестве примера:

Java:

Employee emp = new Employee();
Employee[] empArray = new Employee[10];
// This is similar to C++ STL
List<Employee> empList = new ArrayList<Employee>();

// Array just points to the object as pointer in C++
empArray[0] = emp;

empList.add(emp);

C ++:

Employee emp = new Employee();
Employee * empArray = new Employee[10];
list<Employee> L;

Для более:

Учебные руководства по Java Java Arrays Для создания аналогии ч / б Java и C ++

0 голосов
/ 08 января 2012

Вы можете использовать обобщенный список следующим образом:

List<Employee> employees = new ArrayList<Employee>();
employees.add(new Employee());

Дженерики - это безопасность типов времени компиляции.Компилятор не позволит вам добавить в этот список ничего, кроме экземпляров Employee.

Вы можете просмотреть список следующим образом:

for(Employee employee : employees) {
    // use employee
}

Но если вы хотите изменить списоксам во время итерации, тогда вы должны использовать Iterator.

Iterator<Employee> it = employees.iterator();
while(it.hasNext()) {
    Employee emp = it.next();
    //or it.remove(); to remove the element from the list
}

List s в Java, чтобы поддерживать порядок элементов, в которых они были добавлены в список.

0 голосов
/ 08 января 2012

Вы можете использовать arraylist с шаблонами, как он будет вызываться в c ++, чтобы он выглядел как

ArrayList<MyObject> list = new ArrayList<MyObject>();

Таким образом, любой объект, к которому вы получаете доступ из списка, уже автоматически приводится в MyObject, что исключает ручное приведение, которое вы должны выполнить в вашем случае.

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