Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-apps-script/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 创建ArrayList_Java_Arraylist - Fatal编程技术网

Java 创建ArrayList

Java 创建ArrayList,java,arraylist,Java,Arraylist,我已经看到一个arry列表设置如下 private ArrayList<Student> students; //instance variable public CollegeCommunity()//constructor { students = new ArrayList<Student>(); } ArrayList exampleArray = new ArrayList(); 我理解为什么一个有一个实例变量/构造函数,而另一个只是简单地声明

我已经看到一个arry列表设置如下

private ArrayList<Student> students; //instance variable

public CollegeCommunity()//constructor

{
    students = new ArrayList<Student>();
}
 ArrayList exampleArray = new ArrayList();
我理解为什么一个有一个实例变量/构造函数,而另一个只是简单地声明,但我不确定为什么第一个包含
,而另一个没有

这两者之间的区别是什么?

学生们正在使用所谓的泛型。泛型约束可以传递到
ArrayList
的类型
exampleArray
没有指定类型。

学生使用的是所谓的泛型。泛型约束可以传递到
ArrayList
的类型
exampleArray
没有指定类型。

区别在于称为泛型的语言功能,Java教程教程中对此进行了解释

exampleArray
是使用泛型类
ArrayList

原始类型是没有任何类型参数的泛型类或接口的名称

原始类型没有泛型类型信息,因此与引入泛型之前类的用法相同

另一方面,
学生使用泛型

泛型类型是通过类型参数化的泛型类或接口

因为它们允许编译器拥有更多的类型信息,从而通过允许编译器有效地推断类型来简化编程,这用于强制执行强类型转换消除强制类型转换

原始
ArrayList
几乎相当于
ArrayList
。在有效的Java中突出显示了差异

原始类型
List
和参数化类型
List
之间有什么区别

松散地说,前者选择了泛型类型检查,而后者明确地告诉编译器它能够保存任何类型的对象。虽然可以将
列表
传递给
列表
类型的参数,但不能将其传递给
列表
类型的参数。泛型有子类型规则,
List
是原始类型
List
的子类型,但不是参数化类型
List

因此,如果使用原始类型(如List),则会丢失类型安全性,但如果使用参数化类型(如
List
),则不会丢失类型安全性


区别在于被称为泛型的语言特性,这在Java教程教程中有解释

exampleArray
是使用泛型类
ArrayList

原始类型是没有任何类型参数的泛型类或接口的名称

原始类型没有泛型类型信息,因此与引入泛型之前类的用法相同

另一方面,
学生使用泛型

泛型类型是通过类型参数化的泛型类或接口

因为它们允许编译器拥有更多的类型信息,从而通过允许编译器有效地推断类型来简化编程,这用于强制执行强类型转换消除强制类型转换

原始
ArrayList
几乎相当于
ArrayList
。在有效的Java中突出显示了差异

原始类型
List
和参数化类型
List
之间有什么区别

松散地说,前者选择了泛型类型检查,而后者明确地告诉编译器它能够保存任何类型的对象。虽然可以将
列表
传递给
列表
类型的参数,但不能将其传递给
列表
类型的参数。泛型有子类型规则,
List
是原始类型
List
的子类型,但不是参数化类型
List

因此,如果使用原始类型(如List),则会丢失类型安全性,但如果使用参数化类型(如
List
),则不会丢失类型安全性


第一个ArrayList declatation定义了泛型类型,而exampleArray没有定义泛型类型。建议在可能的情况下使用泛型,以避免铸造的需要:

例如


第一个ArrayList declatation定义了泛型类型,而exampleArray没有定义泛型类型。建议在可能的情况下使用泛型,以避免铸造的需要:

例如


之所以在
ArrayList
旁边有
,是因为您需要指定
ArrayList
将保存的
数据类型。在这种情况下,用户告诉java他想要一个
ArrayList
,它包含class
Students


如果不这样做,它将无法工作。

ArrayList
旁边出现
的原因是您需要指定
ArrayList
将保存的
数据类型。在这种情况下,用户告诉java他想要一个
ArrayList
,它包含class
Students


如果不这样做,它将无法工作。

差异只是对编译器的一个提示。声明
newarraylist()
强制在指定集合中只存储
Student
类的实例。这允许Java通过泛型保持强类型安全性

在运行时,没有任何内容不会改变,因为Java有,但是这个强大的约束将帮助您:每当您尝试使用集合的时间与您用来声明它的时间不同时,编译器都会引发错误。它叫

原始声明
new ArrayList()
将实例化一个列表,其中没有假定要存储在其中的对象类型:这意味着所有内容都可以
ArrayList<Student> students = ...;
Student student = students.get(0);
ArrayList exampleArray = ...;
Example example = (Example)exampleArray.get(0);