目录
1.ArrayList简介
2.ArrayList的构造
2.1ArrayList()
2.2ArrayList(Collection c)
2.3ArrayList(int initialCapacity)
3.ArrayList常见操作
4.ArrayList的遍历的遍历
1.ArrayList简介
在集合框架中,
ArrayList
是一个普通的类,实现了
List
接口,具体框架图如下:
说明:
1. ArrayList 是以泛型方式实现的,使用时必须要先实例化2. ArrayList 实现了 RandomAccess 接口,表明 ArrayList 支持随机访问3. ArrayList 实现了 Cloneable 接口,表明 ArrayList 是可以 clone 的4. ArrayList 实现了 Serializable 接口,表明 ArrayList 是支持序列化的5. 和 Vector 不同, ArrayList 不是线程安全的,在单线程下可以使用,在多线程中可以选择 Vector 或者 CopyOnWriteArrayList6. ArrayList 底层是一段连续的空间,并且可以动态扩容,是一个动态类型的顺序表
2.ArrayList的构造
2.1ArrayList()
public static void main(String[] args) {
ArrayList<Integer> arrayList = new ArrayList<>();
arrayList.add(1);
arrayList.add(2);
}
源代码:
2.2ArrayList(Collection<? extends E> c)
<? extends E>这是什么?
规定了类型上界,即该数组元素的类型上限是E,后面定义装载的元素类型必须是E本身或者E的子类。
public static void main(String[] args) {
ArrayList<Integer> arraylist = new ArrayList<>();
arraylist.add(-1);
arraylist.add(100);
arraylist.add(200);
ArrayList<Number> arrayList2 = new ArrayList<>(arraylist);
arrayList2.add(-100);
System.out.println(arrayList2);
}
源代码:
2.3ArrayList(int initialCapacity)
public static void main(String[] args) {
ArrayList<Integer> arrayList = new ArrayList<>(2);
arrayList.add(100);
arrayList.add(200);
}
汇总:
3.ArrayList常见操作
常用方法汇总:
方法
|
解释
|
boolean
add
(E e)
|
尾插
e
|
void
add
(int index, E element)
|
将
e
插入到
index
位置
|
boolean
addAll
(Collection<? extends E> c)
|
尾插
c
中的元素
|
E
remove
(int index)
|
删除
index
位置元素
|
boolean
remove
(Object o)
|
删除遇到的第一个
o
|
E
get
(int index)
|
获取下标
index
位置元素
|
E
set
(int index, E element)
|
将下标
index
位置元素设置为
element
|
void
clear
()
|
清空
|
boolean
contains
(Object o)
|
判断
o
是否在线性表中
|
int
indexOf
(Object o)
|
返回第一个
o
所在下标
|
int
lastIndexOf
(Object o)
|
返回最后一个
o
的下标
|
List<E>
subList
(int fromIndex, int toIndex)
|
截取部分
list
|
抓重点解析:
1.boolean add(E e)
源代码:
【
总结
】
1. 检测是否真正需要扩容,如果是调用 grow 准备扩容2. 预估需要库容的大小 初步预估按照1.5 倍大小扩容 如果用户所需大小超过预估1.5 倍大小,则按照用户所需大小扩容 ,真正扩容之前检测是否能扩容成功,防止太大导致扩容失败3. 使用 copyOf 进行扩容
2. void add(int index, E element)
在
list
的
index
位置插入指定元素,
index
及后续的元素统一往后搬移一个位置
3.
E
remove
(int index)与boolean
remove
(Object o)
ArrayList<Integer> arraylist = new ArrayList<>(); arraylist.add(1); arraylist.add(100); arraylist.add(0); arraylist.remove(0); System.out.println(arraylist);//删除的是下标为0的元素 arraylist.remove(new Integer(0)); System.out.println(arraylist);//删除的是元素0
删除指定元素,找到了就删除,该元素之后的元素统一往前搬移一个位置
4.List<E> subList(int fromIndex, int toIndex)
构成一个新的
SubList
返回
,
但是和
ArrayList
共用一个
elementData
数组
public static void main(String[] args) {
ArrayList<Integer> arraylist = new ArrayList<>();
arraylist.add(1);
arraylist.add(100);
arraylist.add(0);
List<Integer> sub = arraylist.subList(1, 3);
System.out.println(sub);
sub.set(0,100000);
System.out.println(sub);
System.out.println(arraylist);
}
4.ArrayList的遍历的遍历
ArrayList
可以使用三方方式遍历:
for
循环
+
下标、
foreach
、使用迭代器
public static void main(String[] args) {
List<Integer> list = new ArrayList<>();
list.add(1);
list.add(2);
list.add(3);
list.add(4);
list.add(5);
// 使用下标+for遍历
for (int i = 0; i < list.size(); i++) {
System.out.print(list.get(i) + " ");
}
System.out.println();
// 借助foreach遍历
for (Integer integer : list) {
System.out.print(integer + " ");
}
System.out.println();
Iterator<Integer> it = list.listIterator();
while(it.hasNext()){
System.out.print(it.next() + " ");
}
System.out.println();
}
迭代器:
以上为我个人的小分享,如有问题,欢迎讨论!!!
都看到这了,不如关注一下,给个免费的赞