我可以创建特定类的实例的ArrayList吗?

时间:2012-01-08 02:35:31

标签: java arraylist

我正试图从C ++转到java并遇到一些困难。在C ++中,我可以列出特定的类实例(例如员工类的列表,其中包括name,bday等)。然而,在java中,我很难找到相同的功能。在C ++中,我会使用指针,在Java中,似乎建议使用ArrayList。但是,创建一个数组列表并为其提供类实例是可行的,但我无法再次访问这些类实例。 我真的没有任何代码示例,因为我只是想在这个时候指出正确的方向,只是尝试一下。所以任何建议都会受到更多的赞赏。

5 个答案:

答案 0 :(得分:3)

你可以使用泛型来做到这一点:

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

查看ArrayList<E>List<E>的文档,这是界面。

答案 1 :(得分:1)

正如其他答案所指出的那样,泛型提供了最佳解决方案。

但是,您也可以通过明确的类型转换以老式的方式解决问题; e.g。

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

这是您在Java 1.5之前用Java解决此问题的方法。


顺便说一句,Java编译器生成的代码将包含一个类型转换指令,即使你使用了泛型 ...就像Binyamin Sharet的代码版本一样。

答案 2 :(得分:0)

你可以使用带有模板的arraylist,因为它会在c ++中调用,所以看起来像

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

这样,您从列表中访问的任何对象都已自动转换为MyObject,这样可以避免在您的情况下需要进行的手动转换。

答案 3 :(得分:0)

您可以使用以下格式列表:

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
}
Java中的

List维护了将它们添加到列表中的元素的顺序。

答案 4 :(得分:0)

BT中的BTW不一定要使用ArrayList。如果您的大小已知并且您需要一点性能,则可以使用java数组。

关于C ++中的指针,在java中,所有内容(除了诸如int,float等原语之外)都是一个类似于C ++中指针的引用。

假设我使用数组作为例子:

爪哇:

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 Tutorials Java Arrays To create an analogy b/w Java and C++