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