IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 数据结构与算法 -> ArrayList与顺序表 -> 正文阅读

[数据结构与算法]ArrayList与顺序表

简要介绍

顺序表是一段物理地址连续的储存空间,一般情况下用数组储存,并在数组上完成增删查改。而在java中我们有ArrayList这个容器类封装了顺序表的方法。
在集合框架中,ArrayList是一个普通的类,其实现了list接口。其源码类定义如图在这里插入图片描述
可见,其实现了RandomAccess, Cloneable, 以及Serializable接口,分别代表了其支持随机访问,clone,以及序列化。

1.Arraylist容器类的使用

1.1Arraylist容器类的构造

在这里插入图片描述

 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);

1.2 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中元素也会改变。

1.3ArrayList的遍历

循环遍历
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+" ");
        }

1.4ArrayList中的扩容机制

源码分析:
1.当我们调用无参构造方法,或者参数为0时,此时的数组为一个空数组。
在这里插入图片描述
在这里插入图片描述
而当第一次add的时候,底层的数组容量才变成了10;

2.后续若在需扩容,按照1.5倍扩容在这里插入图片描述
即:1.无参构造方法,或参数为零构造方法,底层数组为0,第一次add后,底层数组为10,10个放满后以1.5倍扩容
2.参数大于零的构造方法,底层数组为参数,数组放满后,以1.5倍扩容。

  数据结构与算法 最新文章
【力扣106】 从中序与后续遍历序列构造二叉
leetcode 322 零钱兑换
哈希的应用:海量数据处理
动态规划|最短Hamilton路径
华为机试_HJ41 称砝码【中等】【menset】【
【C与数据结构】——寒假提高每日练习Day1
基础算法——堆排序
2023王道数据结构线性表--单链表课后习题部
LeetCode 之 反转链表的一部分
【题解】lintcode必刷50题<有效的括号序列
上一篇文章      下一篇文章      查看所有文章
加:2022-06-25 18:20:58  更:2022-06-25 18:23:43 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 1:33:08-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码