我只是想澄清这个问题,我有一段时间以获得更高效和'正确'的代码。
我在一个对象的数组列表中给了一个类'Student'和对象。我有另一个名为Class的类,它有一个对Student类中相同对象的引用的数组列表。
我应该将'Class'类声明为
ArrayList<Student> myStudents = new ArrayList<Student>();
或
ArrayList<Class> myStudents = new ArrayList<Class>();
问题的另一部分是我看到人们将arrayLists声明为ArrayList<Student> myStudents = new ArrayList<>();
胡萝卜的后半部分是空的。这有什么区别意味着什么呢?这是否意味着数组列表不是任何类的对象?
非常感谢你的时间和帮助 干杯
答案 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<>();
如果您要创建ArrayList
个Class
个对象。
1)注意变量名称。
2)请注意,您应该始终尝试对接口进行编码(左侧是List
,而不是ArrayList
)。这样可以提供更大的灵活性,因为您以后不依赖于ArrayList
的具体实现。这一点非常强大!您可以编写方法签名来接受List
类型的对象,然后使用ArrayList
,LinkedList
或Stack
或任何实现List
的类。根据您以后使用ArrayList
的方式,Collection
界面可能就足够了。
菱形运算符允许编译器推断类型参数的值,而不必全部输入。它是旧Java版本向后兼容所必需的。
作为性能优化的一般做法,如果可能,您还需要提供ArrayList
的初始容量。因此,如果您知道只有5个类,那么您可以这样做:
List<Class> myClasses = new ArrayList<>(5);