数组的长度是不可变的,如果初始长度过大,则会造成内存的浪费,降低性能,而数组初始长度过小时,又无法满足大量数据的存储。这时候就需要集合类(ArrayList)来进行数组扩容等操作,同时列表还可以包含批量删除、修改等便捷操作。
类型 数组名[]
类型 [] 数组名
int a[], b; 声明一个数组a和单个变量b
int[] a, b; 声明数组a和数组b
同时声明数组时也可以进行初始化:
静态初始化:public String musname[]={
"coffee","tea"};
动态初始化:public String musname[]=new String[2];
数组声明时只能在动态、静态中选择一种方式进行初始化。数组属于引用型变量,数组变量中存放着数组的首元素的地址,通过数组变量的名字加索引使用数组元素。
1、Java的列表是一个类,这个类中包含数组,也包含各种处理数组的方法,同时还有必要的get方法以取出保存的数组,Java自带了集合:java.util.ArrayList类(父类是List)。
为了更好理解底层原理,我们先自己定义一个集合类,集合类至少应包括添加元素、获取数组、获取长度等功能。在定义集合类之前,我们先考虑这样一个问题:对于不同的数据类型,如果我们想要使用集合,就需要创建不同数据类型的集合来存取,而如果我们使用Object类来创建初始数组,那么数据类型的元素都可以存进数组里,比如String、Integer等。
首先,自定义一个集合类:
/**
* Created by DYB on 2022/11/9.
* 自定义定义一个集合类
* 基本功能:集合类至少应包括添加元素、获取数组、获取长度等功能
* name:MyList
* Parameters:
* size:记录列表的长度
* array:类型为Object、长度为0的初始数组
* function:
* public Object[] getArray(){}:往列表中增加一个元素
* public int getSize(){}:获取集合的长度
*/
public class MyList {
private int size=0;
private Object[] arry=new Object[0];
//向列表中增加一个元素
public void add(Object obj){
Object[] newarry=new Object[arry.length+1];
for (int i=0;i<arry.length;i++){
newarry[i]=arry[i];
}
newarry[arry.length]=obj;
arry=newarry;
size++;
}
//获取数组
public Object[] getArray(){
return arry;
}
public int getSize(){
return size;
}
}
启动类中声明一个自定义集合类的对象,并模拟元素添加:
/**
* Created by DYB on 2022/11/4.
*/
public class TestSpring {
public static void main(String[] args) {
MyList list=new MyList();
System.out.println("list列表的长度为:"+list.getSize());
int a=10;
list.add(a);
list.add(a);
String b="abc";
list.add(b);
list.add(b);
System.out.println("list列表的长度为:"+list.getSize());
for (int i=0;i<list.getSize();i++){
System.out.print(list.getArray()[i] +" ");
}
}
}
运行结果:
从结果可以看到,我们声明了一个集合类,由于原始数组采用Object类,因此在一个集合中可以存放不同类型的数据。
2、泛型的出现:现在,我们考虑这样一个问题:实际工作中,我们往往需要一个数组里的元素都是同一个数据类型的,比如String,或者是我们定义的其他类。那么如何在集合类中实现对数据类型的控制呢?这就是泛型的作用了!
泛型:其符号是“<>”。我们可以在类名后加上< E >或者< T >等,其中的字母相当于将类型参数化,就是将类型作为参数传入到方法,这样我们创建List时可以通过泛型限制传入的元素,当出现不符合预期的元素时编译器便会报错。
自定义一个泛型集合类:
/**
* Created by DYB on 2022/11/10.
* 自定义一个泛型集合类
*/
public class FanList<T> {
private int size=0;
private Object[] array=new Object[0];
public void add(T element){
Object[] newarray=new Object[array.length+1