Java超详细讲解ArrayList与顺序表的用法

网友投稿 385 2022-07-22


目录简要介绍Arraylist容器类的使用Arraylist容器类的构造ArrayList的常见方法ArrayList的遍历ArrayList中的扩容机制

简要介绍

顺序表是一段物理地址连续的储存空间,一般情况下用数组储存,并在数组上完成增删查改。而在java中我们有ArrayList这个容器类封装了顺序表的方法。

在集合框架中,ArrayList是一个普通的类,其实现了list接口。其源码类定义如图

可见,其实现了RandomAccess, Cloneable, 以及Serializable接口,分别代表了其支持随机访问,clone,以及序列化。

Arraylist容器类的使用

Arraylist容器类的构造

public static void main(String[] args) {

//无参数的构造方法

List list1 = new ArrayList<>();

//指定初始容量的构造方法

List list2 = new ArrayList<>();

list1.add(1);

list1.add(2);

list1.add(3);

//使用其他collection进行初始化(此处是ArrayList)

List list3 = new ArrayList<>(list1);

ArrayList的常见方法

方法解释boolean add(E e)尾插evoid add(int index, E element)将 e 插入到 index 位置boolean addAll(Collection extends E> c)将集合 c 中的元素 尾插到该集合中E remove(int index)删除 index 位置元素并返回boolean remove(Object o)删除遇到的第一个 oE get(int index)获取下标 index 位置元素E set(int index, E element)将下标 index 位置元素设置为 elementvoid clear()清空顺序表boolean contains(Object o)判断 o 是否在线性表中int indexOf(Object o)返回第一个 o 所在下标int lastIndexOf(Object o)返回最后一个 o 的下标List< E > subList(int fromIndex, int toIndex)截取部分 list

List list = new ArrayList<>();

list.add("盛夏");// 尾插元素 “盛夏”

list.add(1,"洋光");//在1下标处插入元素 “洋光”

list.addAll(list);//将list中的元素全部尾插

list.remove(0);//删除0下标处的元素

boolean flg = list.remove("盛夏");//删除遇到的第一个元素“盛夏”,删除成功flg为true,删除失败flg为false;

String s = list.get(0);//获取0下标处的元素

list.set(0,"盛夏");//将0下标元素设为 “盛夏”

boolean flg1 = list.contains("盛夏");//查询“盛夏”是否在顺序表内,存在flg1为true,不存在flg1为false;

list.indexOf("盛夏");//返回第一个 "盛夏" 所在下标

list.lastIndexOf("盛夏");// 返回最后一个 "盛夏" 的下标

//截取list的[0,1)为subList,注意区间左闭右开

List subList = list.subList(0,1);

注:此处的subList方法只是截取了原list中被截取部分的地址,所以若改变subList元素,原list中元素也会改变。

ArrayList的遍历

循环遍历

for-each遍历

//循环遍历

for(int i = 0; i

System.out.print(list.get(i)+" ");

}

//for-each 遍历

for(String i:list){

System.out.print(i+" ");

}

ArrayList中的扩容机制

源码分析:

1.当我们调用无参构造方法,或者参数为0时,此时的数组为一个空数组。

而当第一次add的时候,底层的数组容量才变成了10;

2.后续若在需扩容,按照1.5倍扩容

即:

1.无参构造方法,或参数为零构造方法,底层数组为0,第一次add后,底层数组为10,10个放满后以1.5倍扩容

2.参数大于零的构造方法,底层数组为参数,数组放满后,以1.5倍扩容。

System.out.print(list.get(i)+" ");

}

//for-each 遍历

for(String i:list){

System.out.print(i+" ");

}

ArrayList中的扩容机制

源码分析:

1.当我们调用无参构造方法,或者参数为0时,此时的数组为一个空数组。

而当第一次add的时候,底层的数组容量才变成了10;

2.后续若在需扩容,按照1.5倍扩容

即:

1.无参构造方法,或参数为零构造方法,底层数组为0,第一次add后,底层数组为10,10个放满后以1.5倍扩容

2.参数大于零的构造方法,底层数组为参数,数组放满后,以1.5倍扩容。


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:Java多线程Thread类的使用及注意事项
下一篇:JavaEE线程安全定时器模式任务
相关文章

 发表评论

暂时没有评论,来抢沙发吧~