ArrayList使用什么类?

时间:2016-11-12 02:37:40

标签: java arraylist

我只是想澄清这个问题,我有一段时间以获得更高效和'正确'的代码。

我在一个对象的数组列表中给了一个类'Student'和对象。我有另一个名为Class的类,它有一个对Student类中相同对象的引用的数组列表。

我应该将'Class'类声明为

ArrayList<Student> myStudents = new ArrayList<Student>();

ArrayList<Class> myStudents = new ArrayList<Class>();

问题的另一部分是我看到人们将arrayLists声明为ArrayList<Student> myStudents = new ArrayList<>(); 胡萝卜的后半部分是空的。这有什么区别意味着什么呢?这是否意味着数组列表不是任何类的对象?

非常感谢你的时间和帮助 干杯

2 个答案:

答案 0 :(得分:0)

这取决于您要在列表中存储的内容而不是您使用它的位置。如果您正在存储学生对象,那么您将使用ArrayList<Student>()

右侧省略的类型称为类型推断(在java 7中添加),这意味着右侧的类型参数将从左侧赋值变量的类型推断出来。它有助于以更清洁的方式编写代码。例如,

下面的写作更容易:

List<Some<Type<Another>>> var = new ArrayList<>();

比:

List<Some<Type<Another>>> var = new ArrayList<Some<Type<Another>>>();

答案 1 :(得分:0)

从技术上讲,既不

你想要这样做:

List<Student> myStudents = new ArrayList<>();

如果您想使用ArrayList个对象和

创建Student
List<Class> myClasses = new ArrayList<>();

如果您要创建ArrayListClass个对象。

1)注意变量名称。

2)请注意,您应该始终尝试对接口进行编码(左侧是List,而不是ArrayList)。这样可以提供更大的灵活性,因为您以后不依赖于ArrayList的具体实现。这一点非常强大!您可以编写方法签名来接受List类型的对象,然后使用ArrayListLinkedListStack或任何实现List的类。根据您以后使用ArrayList的方式,Collection界面可能就足够了。

菱形运算符允许编译器推断类型参数的值,而不必全部输入。它是旧Java版本向后兼容所必需的。

作为性能优化的一般做法,如果可能,您还需要提供ArrayList的初始容量。因此,如果您知道只有5个类,那么您可以这样做:

List<Class> myClasses = new ArrayList<>(5);