java基础学习 day37 (集合)
- 集合与数组的区别
- 长度:数组长度固定,一旦创建完成,就不能改变。集合长度可变,根据添加和删除元素,自动扩容或自动收缩,(添加几个元素就扩容多少,删除几个元素就收缩多少)
- 存储类型:数组可以存基本数据类型和引用数据类型。集合可以存引用数据类型,但集合不能直接存储基本数据类型,只有把基本数据类型变成包装类后才可以存到集合中
- 基本数据类型对应的包装类:
基本数据类型 | 包装类 |
---|---|
byte | Byte |
short | Short |
char | Character |
int | Integer |
long | Long |
float | Float |
double | Double |
boolean | Boolean |
- 在JDK5以后 int Integer,char Character(基础数据类型和包装类)之间可以互相转化,即实参可以直接写基础数据类型。
- 创建集合的对象
ArrayList <E > list = new ArrayList<E >();
//JDK7以前的写法
ArrayList <E > list = new ArrayList< >();
//从JDK7开始的写法
- 其中:<E >为泛型,用来限定集合中存储数据的类型,在JDK7以后,后面的E可以省略,只写前面的E即可。
- 在sout集合名时,打印的不是地址值,而是集合中存储的数据内容,同时会用[ ]把所有的数据进行包裹,数据与数据之间用“,”隔开,这是java已经写好的模式。
- ArrayList成员方法
- add(添加元素)的方法,若匹配数据类型则不管内容,返回值都是true,都会添加成功。
- 且add(添加元素)的方法,添加的是元素的地址值,有一个注意点,如图:
若在循环外创建Student对象,只会申请一次内存空间用来存Student的值,则循环内每次添加的元素的地址都相同,修改这个Student对象的内容时,会将几个相同地址值的元素的内容均进行修改
若在循环内创建Student对象,则每次创建都会申请一片新空间用来存储Student的值,即每次添加的元素的地址值都不同,那么修改这个Student对象时,每次都是独立修改,不会对之前的造成影响。且这个Student对象名为局部变量,每次循环结束都会回收这个Student对象名,但因为集合中有元素的地址指向这块内存空间,所以,这块内存空间不会回收。
- 其中remove(删除元素)的方法,会删除从左至右的第一个匹配的元素,删除成功后,返回true,集合会更新,若删除失败,返回false,集合不变。