ArrayList的构造方法

//1.无参的构造方法,底层创建一个10个大小的空间,里面存储E类型的元素
ArrayList<E> arrayList = new ArrayList<>();
//2.有参的构造方法,底层创建一个指定个大小的空间,里面存储E类型的元素
ArrayList<E> arrayList1 = new ArrayList<>(20);

ArrayList集合底层有扩容的操作,因此不用担心数据是否够存储的问题

当不明确数据元素个数时,使用无参构造

当明确集合中元素个数的时候,使用有参构造更有效率

相较于数组的区别

相同点:都可以存储多个相同数据类型的元素

1.数组的长度是固定的,而集合的长度是可扩展的

2.数组既可以存储基本数据类型,也可以存储引用数据类型

   集合只能存储引用数据类型

扩容机制

ArrayList不需要使用者担心底层扩展的问题,只需要使用就可以了

ArrayList的空间阈值是0.75,也就是说当已有元素长度达到了集合长度的75%,集合会扩大至当前长度的1.5倍数

集合(10) -> (15) -> (22) -> (33) -> (50) 扩容是需要耗费时间的(底层创建新数组/移动老数组的内容)

因此当明确集合数据的长度时,尽可能直接创建指定大小的集合

集合的长度与有效元素个数(最开始模糊的内容)

当创建一个集合时,我们可以指定长度或者让他默认长度是10,它仍是一个空集合,没有任何内容的集合

集合的底层是数组,也就是创建了指定个数或者10个null,但当使用集合进行操作时,没有的数据对我们来说毫无意义。

这也就是为什么我们进行操作时,操作的都是已经添加的元素,也就是集合中的有效元素

常用方法

增(1.按顺序添加元素 2.在指定索引处添加元素)

//创建一个长度为10,String类型的集合
ArrayList<String> strList = new ArrayList<>();

//1.向集合中按顺序添加元素
strList.add("同学一");
strList.add("同学二");
strList.add("同学三");

//当前有效元素长度为3,索引有 0  1  2

//2.向集合中指定的索引处添加元素,后面的元素向后移
strList.add(2,"同学四");
System.out.println("添加了4个元素之后,集合的内容是:" + strList);

这里要注意:在指定索引处添加元素时,最大只能是当前有效元素的长度,arrayList底层封装了一个指针,指向最后一个有效元素,并且我们也只对集合中有效元素进行操作

如果指定的索引大于当前元素个数,那么会报错:索引越界异常

List限制长度 java java list 长度_数组

 

删(1.删除第一个遇到的元素 2.删除指定索引处的元素 3.清空集合中所有元素)

ArrayList<String> strList = new ArrayList<>();
strList.add("张三");
strList.add("张三");
strList.add("李四");
strList.add("王五");
System.out.println("当前数据:"+strList);
//数据删除后,后面所有的元素统一向前移动

//1.删除第一个指定内容的元素
strList.remove("张三");
System.out.println("删除张三后的结果是:"+strList);

//2.删除指定索引处的元素
strList.remove(1);
System.out.println("删除索引1后的结果是:"+strList);

//3.清空集合中所有元素
strList.clear();

List限制长度 java java list 长度_开发语言_02

如何删除多个重复的元素?

1.通过遍历倒序判断删除,这样避免了删除数据,元素前移这种情况发生

2.正序遍历符合条件删除后,进行i- -的操作,判断前移的数据

改(1.更改指定索引处的数据)

//修改索引3的数据为李四,将被替换的元素作为返回值
String rep = strList.set(3, "李四");

当集合中存储的是已经被封装好的Student对象,而我们需要修改Student对象中指定name的age时:

1.通过ArrayList中的set方法,重新set一个新对象. (当对象属性过多时,创建过程浪费资源)

2.通过遍历判断后,使用Student.setAge(),对当前对象的属性进行修改.

查(1.获取指定索引处的元素 2.获取有效元素长度 3.判断是否包含指定内容 4.是否为空集合)

//1.获取指定索引处的元素,并返回该元素
String element0 = strList.get(0);

//2.获取当前有效元素个数
int len = strList.size();

//3.判断是否包含指定内容, 包含返回true, 不包含返回false
boolean result = strList.contains("王一");

//4.是否为空集合, 为空返回true
boolean empty = strList.isEmpty();