ArrayList类是一个可以动态修改的数组,与普通数组的区别就是它是没有固定大小的限制,我们可以添加或删除元素。ArrayList继承了AbstractList,并实现了List接口,顺序表是将元素顺序地存放在一块连续的存储区里,元素间的顺序关系由它们的存储顺
简要介绍
顺序表是一段物理地址连续的储存空间,一般情况下用数组储存,并在数组上完成增删查改。而在java中我们有ArrayList这个容器类封装了顺序表的方法。
在集合框架中,ArrayList是一个普通的类,其实现了list接口。其源码类定义如图
可见,其实现了RandomAccess, Cloneable, 以及Serializable接口,分别代表了其支持随机访问,clone,以及序列化。
Arraylist容器类的使用
Arraylist容器类的构造
public static void main(String[] args) {
//无参数的构造方法
List<Integer> list1 = new ArrayList<>();
//指定初始容量的构造方法
List<Integer> list2 = new ArrayList<>();
list1.add(1);
list1.add(2);
list1.add(3);
//使用其他collection进行初始化(此处是ArrayList)
List<Integer> list3 = new ArrayList<>(list1);
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 |
List<String> 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<String> subList = list.subList(0,1);
注:此处的subList方法只是截取了原list中被截取部分的地址,所以若改变subList元素,原list中元素也会改变。
ArrayList的遍历
循环遍历
for-each遍历
//循环遍历
for(int i = 0; i<list.size();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倍扩容。
到此这篇关于Java超详细讲解ArrayList与顺序表的用法的文章就介绍到这了,更多相关Java ArrayList与顺序表内容请搜索编程学习网以前的文章希望大家以后多多支持编程学习网!
本文标题为:Java超详细讲解ArrayList与顺序表的用法
基础教程推荐
- Java数据结构之对象比较详解 2023-03-07
- Java实现线程插队的示例代码 2022-09-03
- JDK数组阻塞队列源码深入分析总结 2023-04-18
- java实现多人聊天系统 2023-05-19
- ConditionalOnProperty配置swagger不生效问题及解决 2023-01-02
- springboot自定义starter方法及注解实例 2023-03-31
- Java文件管理操作的知识点整理 2023-05-19
- java基础知识之FileInputStream流的使用 2023-08-11
- Java实现查找文件和替换文件内容 2023-04-06
- Java并发编程进阶之线程控制篇 2023-03-07