学习目录
ArrayList 介绍
ArrayList
背后是一个顺序表
,它可以指定存放任意类型的数据
ArrayList类 称动态数组
, 同时实现了 Collection
和 List
接口,其内部数据结构由数组
实现
ArrayLIst类 是在 java.util 包
里面,Java 集合类一般都是在 java.util 包
Arraylist
是以泛型
方式实现的,使用必须要先实例化ArrayList
实现了RandomAccess接口
,表明ArrayList支持随机访问ArrayList
实现了Cloneable接口
,表明ArrayList是可以clone的ArrayList
实现了Serializable接口
,表明ArrayList是支持序列化的ArrayList
不是线程安全的,在单线程下可以使用ArrayList
底层是一段连续的空间,并且可以动态扩容,是一个动态类型的顺序表
ArrayList 的使用
- ArrayList 里有:
add
(添加)
contains
(判定是否包含某个元素)
indexOf
(查找某个元素对应的位置)
get
(获取 某个 位置的元素)
set
(给 某个 位置的元素设为 某个值)
remove
(删除第一次出现的某个值)
clear
(清空顺序表)
ArrayList的构造方法
- ArrayList 有 三个构造方法:
1 无参的构造方法ArrayList( )
2 根据传入的数值大小,创建指定长度的数组ArrayList( int initialCapacite)
3 通过传入Collection元素列表进行生成ArrayList(Collection <? extends E> c)
例如:
public static void main(String[] args) {
// 无参构造方法 默认数组大小为 10
ArrayList<Integer> arrayList = new ArrayList<>();
arrayList.add(1);
arrayList.add(2);
System.out.println(arrayList);
// 传入指定参构造方法 初始数组大小为 15
ArrayList<Integer> arrayList2 = new ArrayList<>(15);
arrayList2.add(3);
arrayList2.add(4);
System.out.println(arrayList2);
// 那 arr2 的数据存放到 arr3 里
ArrayList<Integer> arrayList3 = new ArrayList<>(arrayList2);
}
ArrayLIst 里的源代码
ArrayLIst 无参数构造方法
public ArrayList() {
this.elementData = DEFAULTCAPACITY_EMPTY_ELEMENTDATA;
}
这个构造方法是没有分配数组内存空间的
当我们调用不带参数的构造方法,使用第一个add
方法存储数据到 ArrayLIst 数组时,才会把当前数组开辟 10 个空间
如果存放超过数组大小元素时,是采用 1.5 倍扩容
ArrayList 常用方法
add 方法
add :添加新的元素
方法 | 方法功能 |
---|---|
add (E e) |
将元素添加到当前列表的末尾 |
add (int index,E element) |
在当前列表的指定位置 添加指定元素 |
addAll (Collection<? extends E> c) |
将指定的列表添加到此列表的尾部 |
addAll ( int index,Collection<? extends E e> c ) |
在当前数组的指定位置 添加指定的数组 |
示范:
public static void main(String[] args) {
ArrayList<Integer> arrayList = new ArrayList<>();
arrayList.add(1);
arrayList.add(2);
System.out.println(arrayList);
// 把 0 下标的元素修改为 66
arrayList.add(0,66);
System.out.println(arrayList);
ArrayList<Integer> arrayList2 = new ArrayList<>();
arrayList2.add(3);
arrayList2.add(4);
// addAll 是把另一个数组里的所以元素添加到这个数组元素的末尾
arrayList.addAll(arrayList2);
System.out.println(arrayList);
}
执行结果:
remove 方法
remove :删除指定的元素
方法 | 方法功能 |
---|---|
remove (int index ) |
删除该顺序表中指定下标的元素 |
remove (Object o) |
删除该顺序表中第一个指定的元素 |
removeAll (Collection<?> c) |
删除指定集合包含的所有元素 |
retainAll() (Collection<?> c) |
除了指定的元素,其他元素全部删除 |
public static void main(String[] args) {
ArrayList<String> arrayList = new ArrayList<>();
arrayList.add("小明"); arrayList.add("小红");
arrayList.add("黑狗"); arrayList.add("白兔");
arrayList.add("金刚"); arrayList.add("黑狗");
arrayList.add("玄武");
System.out.println("最开始:" + arrayList);
// remove 删除 1 下标的元素
String s = arrayList.remove(1);
System.out.println("删除 1 下标元素后:" + arrayList);
// remove 删除指定变量名字,要用 boolean 来判断是否删除成功
boolean flag1 = arrayList.remove("小明");
System.out.println("删除 小明 后:" + arrayList);
// 删除指定的顺序表里所有相同的元素
ArrayList<String> str = new ArrayList<>();
str.add("黑狗");
// 在arrayList 顺序表里 删除 str 里包含的所有相同的元素
boolean flag2 = arrayList.removeAll(str);
System.out.println("删除arrayList里所有的 黑狗 后:" + arrayList);
// 在arrayList 顺序表里,ret的元素除外,其他元素全部删除
ArrayList<String> ret = new ArrayList<>();
ret