当前位置: 代码迷 >> 综合 >> 泛型数组列表(ArryList)
  详细解决方案

泛型数组列表(ArryList)

热度:56   发布时间:2023-12-04 23:27:58.0

泛型数组列表(ArryList):

初识编程语言就是c语言。而在c语言中,对于数组大小的判断,必须在编译的时候就确定,对此感觉
十分的苦恼,毕竟某大型公司中的大型部门,是不愿意为那些仅仅有10名的雇员的部门浪费90
名雇员占据的办公室的。
而在Java中,就允许在运行是才确定数组的大小。

int size=...;
Employee[] staff = new Employee[size];

但还未曾完全解决运行时动态改变数组的问题

这就引出这次的学习对象——ArrayList

采用类型参数(type parameter)的泛型类(generic class).

声明和构造一个保存Employee对象的数组列表:

ArrayList<Employee> staff = new ArrayList<Employee>();

使用()方法将元素添加到数组列表中:

staff.add(new Employee(.....));

且不用去担心数组的空间被用尽,因为数组列表会自动地创建一个更大的数组,听起来是高大上的,
嘻嘻

但如果在创建之前知道数组的大小,可以在填充之前调用:

staff.ensureCapacity(100);

也可以在初始状态就将容量传递给构造器。

警告:

new ArrayList<Employee>(100) 

new Employee(100)

的分配空间是不一样的,也就是数组列表的容量和数组的大小是不一样的,其实看看他们之间
的叫法就是不一样(皮一下):
为数组分配100个元素的存储空间,其数组中就有100个空闲的位置,而容量为100个元素只是
拥有保存100个元素的潜力….

类型化与原始数组列表的兼容性

在Java SE较新的版本中,是使用类型参数的数组列表,但也有可能和程序中原始的ArrayList
进行交叉操作
简单来说就是可以将一个类型化的数组列表传递给某个方法,而且不需要进行任何类型转换。
(但这种调用是不安全的)
类型转换时将进行相同的运行时检查。

补充:

而对于泛型来说

  • 创建泛型的时候,一定要指出类型变量T的具体类型,争取让编译器检查出错误,而不是留给JVM运行时抛出类不匹配的异常

  • 泛型概念——类型擦除。实际上,JVM并不知道泛型,它只是在编译阶段将泛型处理成了普通类和方法,叫做类型变量T的擦除。

  相关解决方案