ArrayList
一、ArrayList类概述
ArrayList类是一个可以动态变化的数组,与普通数组的区别就是它没有固定的长度。对于ArrayList的理解和应用,需要掌握其容量、扩容条件、add、get、remove、遍历删除等方法的使用,以及其底层数据结构和线程安全性等。
ArrayList继承了AbstractList,并实现了List接口。
二、引入语法格式:
ArrayList objectName = new ArrayList<>();//E:泛指数据类型,用于设置objectName的数组类型
三、ArrayList初始容量及扩容:
- ArrayList的初始容量是指创建ArrayList对象时所分配的内存空间大小。在Java中,如果没有为ArrayList指定初始容量,它将自动分配一个默认的初始容量0。
- 当向ArrayList中添加元素时,如果元素的数量超过了当前容量,ArrayList会自动扩容。默认的扩容机制是将容量增加原来容量的1.5倍。需要注意的是,扩容操作会重新分配内存空间,并将原有元素复制到新空间中,这个过程需要消耗一定的时间。
- 如果你在创建ArrayList对象时指定了初始容量,那么ArrayList的初始容量就是这个指定的容量值。例如,如果你写“ArrayList list = new ArrayList(10);”,那么list的初始容量就是10。
四、ArrayList是一个数组队列,提供了相关的添加、删除、修改、遍历等功能。
1.添加元素:
添加元素到ArrayList可以使用add()方法:
import java.util.ArrayList; public class ArrayListTest { public static void main(String[] args) { ArrayListarrList = new ArrayList (); arrList.add("吐泡泡"); arrList.add("SpitBubble"); System.out.println(arrList); } }
输出结果
[吐泡泡, SpitBubble]
2.访问元素:
访问ArrayList中的元素可以使用get()方法:
import java.util.ArrayList; public class ArrayListTest { public static void main(String[] args) { ArrayListarrList = new ArrayList (); arrList.add("吐泡泡"); arrList.add("SpitBubble"); System.out.println(arrList); System.out.println(arrList.get(0));//get()方法访问元素,索引从0开始 System.out.println(arrList.get(1)); } }
输出结果
[吐泡泡, SpitBubble] 吐泡泡 SpitBubble
3.修改元素
修改ArrayList中的元素使用set()方法:
import java.util.ArrayList; public class Test { public static void main(String[] args) { ArrayListarrList = new ArrayList<>(); arrList.add("吐泡泡"); arrList.add("SpitBubble"); System.out.println(arrList); System.out.println(arrList.get(0)); System.out.println(arrList.get(1)); arrList.set(0,"Java");//修改链表中的索引为0的元素 System.out.println("修改后的数据为:\n"+arrList.get(0)); System.out.println(arrList.get(1)); } }
输出结果
[吐泡泡, SpitBubble] 吐泡泡 SpitBubble 修改后的数据为: Java SpitBubble
4.删除元素
删除ArrayLIst中的元素可以使用remove()方法:
import java.util.ArrayList; public class Test { public static void main(String[] args) { ArrayListarrList = new ArrayList<>(); arrList.add("吐泡泡"); arrList.add("SpitBubble"); System.out.println(arrList); arrList.remove(0); System.out.println(arrList); } }
输出结果
[吐泡泡, SpitBubble] 移除索引为0的数组后:[SpitBubble]
5.ArrayLIst长度
计算ArrayLIst中元素的数量使用size()方法:
import java.util.ArrayList; public class Test { public static void main(String[] args) { ArrayListarrList = new ArrayList<>(); arrList.add("吐泡泡"); arrList.add("SpitBubble"); System.out.println("arrList的长度是:" + arrList.size()); } }
输出结果
arrList的长度是:2
五、ArrayList的迭代
1.for循环迭代数组列表中的元素:
import java.util.ArrayList; public class Test { public static void main(String[] args) { ArrayListarrList = new ArrayList<>(); arrList.add("吐泡泡"); arrList.add("SpitBubble"); arrList.add("Java"); //循环遍历数组 for(int i = 0 ; i < arrList.length ; i++){ System.out.println("arrList.get(i)"); } } }
输出结果
吐泡泡 SpitBubble Java
2.for-each迭代数组列表元素:
import java.util.ArrayList; public class Test { public static void main(String[] args) { ArrayListarrList = new ArrayList<>(); arrList.add("吐泡泡"); arrList.add("SpitBubble"); arrList.add("Java"); //循环遍历数组 for(String i : arrList ){ System.out.println("arrList.get(i)"); } } }
输出结果
吐泡泡 SpitBubble Java
3.迭代器(Iterator)遍历数组列表元素:
调用ArrayList的iterator方法来获取一个迭代器对象,然后使用while循环和hasNext方法来遍历ArrayList中的元素。在每次循环中,我们调用next方法来获取下一个元素,并将其打印到控制台上。
import java.util.ArrayList; import java.util.Iterator; public class Test { public static void main(String[] args) { ArrayListarrList = new ArrayList (); arrList.add("吐泡泡"); arrList.add("SpitBubble"); arrList.add("Java"); // 使用迭代器遍历ArrayList Iterator it = arrList.iterator(); while (it.hasNext()) { String element = it.next(); System.out.println(element); } } }
输出结果
吐泡泡 SpitBubble Java
六、底层数据结构
在使用ArrayList时,可以通过add、get、remove等方法来添加、查询和删除元素。这些方法的具体实现是通过操作底层的数据结构——数组来完成的。例如,add方法会将元素添加到数组的末尾,get方法会根据索引值计算出元素在数组中的位置,并返回该位置上的元素,remove方法会根据元素的值查找该元素在数组中的位置,并将该位置上的元素置为null,并更新size属性。
由于ArrayList的底层数据结构是数组,因此在查询和遍历元素时,速度非常快。但是,在添加和删除元素时,由于需要重新分配内存空间和复制数组,因此速度比较慢。为了提高程序的效率,可以使用一些优化技巧,例如使用扩容机制和预分配初始容量等。
总之,ArrayList的底层数据结构是数组,这种数据结构在查询和遍历元素时非常高效,但是在添加和删除元素时可能会比较慢。为了提高程序效率,可以使用扩容机制和预分配初始容量等优化技巧。