【数据结构与算法】ArrayList与顺序表(上)

简介: 【数据结构与算法】ArrayList与顺序表(上)

🍗hello,进来的小伙伴们,你们好呐!

🍔🍔系列专栏:【数据结构与算法】

🍼🍼作者简介:一名大三在读的科班Java小白,星夜漫长,你我同行!

🌯🌯本篇内容:初始ArrayList与顺序表,简单了解ArrayList的基本用法,入门顺序表!

一、线性表

🍊线性表(linear list)是n个具有相同特性的数据元素的有限序列。 线性表是一种在实际中广泛使用的数据结构,常见的线性表:顺序表、链表、栈、队列...

🍅线性表在逻辑上是线性结构,也就说是连续的一条直线。但是在物理结构上并不一定是连续的,线性表在物理上存储时,通常以数组和链式结构的形式存储。

56f4bfe4cece4c4f864459be0c316057.png

二、ArrayList简介

1.集合框架图


9447d266173b4713b3a464d2dd7c937f.png

🍜🍜我们可以发现,List是个接口,并不能直接用来实例化。

如果要使用,必须去实例化List的实现类。在集合框架中,ArrayList和LinkedList都实现了List接口,本篇我们主要介绍的是ArrayList。

🍚🍚结论:

1. ArrayList实现了RandomAccess接口,表明ArrayList支持随机访问。

2. ArrayList实现了Cloneable接口,表明ArrayList是可以clone的。

3. ArrayList实现了Serializable接口,表明ArrayList是支持序列化的。

4. 和Vector不同,ArrayList不是线程安全的,在单线程下可以使用,在多线程中可以选择Vector或者CopyOnWriteArrayList。

5. ArrayList底层是一段连续的空间,并且可以动态扩容,是一个动态类型的顺序表。

三、ArrayList使用

1、ArrayList三种方式构造

   public class demo3 {

       public static void main(String[] args) {

           // 构造一个空的列表

           //当我们调用不带参数的构造方法的时候,只有第一次add的时候 才会分配大小为10的内存

           ArrayList<String> s1 = new ArrayList<>();

           s1.add("hello");

           s1.add("java");

           System.out.println(s1);

   

   

           //构造一个具有3个容量的顺序表

           ArrayList<Integer> n1 = new ArrayList<>(3);

           n1.add(666);

           n1.add(888);

           n1.add(999);

           System.out.println(n1);

   

   

           //ArrayList(Collection<? extends E> c) 大类实现Collection接口便可以传

           ArrayList<Integer> n2 = new ArrayList<>(n1);//把n1里面的元素放到n2里面

           System.out.println(n2);

       }

   }


b81f1dfaaf8c4cb8aabad6e1ece6e3db.png

2、ArrayList的常见操作

ArrayList的操作方法还是蛮多的,这里我提供几个比较常用的使用方法,如果大家还想了解更多的操作方法可以在参考文档查找!

在线文档:

2eed5f293158432b89fa9d0aacc05003.png

常用方法:

7f27689d431e4d498c27e8b6a72e30e5.png

在线演示:

   public class demo5 {

       public static void main(String[] args) {

           List<String> list = new ArrayList<>();

           list.add("hello java");

           list.add("BATJ");

           list.add("大厂!!!");

           System.out.println(list);

         

           // 获取list中有效元素个数

           System.out.println(list.size());

         

           // 获取和设置index位置上的元素,注意index必须介于[0, size)间

           System.out.println(list.get(1));

           list.set(1, "好好学习!!!");

           System.out.println(list.get(1));

         

6b11dfae352248c580ae98660abbe231.png

加上clear()方法后,我们在看运行结果:

03abf2323850493a958407b0cdc77e7c.png

3、 ArrayList的遍历

ArrayList 可以使用三方方式遍历:for循环+下标、foreach、使用迭代器。

   public class Bianli {

       public static void main(String[] args) {

           ArrayList<Integer> c1 = new ArrayList<>();

           c1.add(1);

           c1.add(2);

           c1.add(3);

           c1.add(4);

           c1.add(5);

           for (int i = 0; i < c1.size(); i++) {//使用下标for遍历

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

           }

           System.out.println();

   

   

           for (Integer s1:c1) {//使用foreach遍历

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

           }

           System.out.println();

   

   

           Iterator<Integer> it = c1.iterator();//使用迭代器遍历

           while (it.hasNext()){

               System.out.print(it.next()+" ");

           }

           System.out.println();

       }

   }

运行结果:

407989fcdbf64fa3a21c6928810ad96a.png

相关文章
|
1月前
|
Java
【Java集合类面试二十六】、介绍一下ArrayList的数据结构?
ArrayList是基于可动态扩展的数组实现的,支持快速随机访问,但在插入和删除操作时可能需要数组复制而性能较差。
|
3天前
|
存储 Java 程序员
【数据结构】初识集合&深入剖析顺序表(Arraylist)
Java集合框架主要由接口、实现类及迭代器组成,包括Collection和Map两大类。Collection涵盖List(有序、可重复)、Set(无序、不可重复),Map则由键值对构成。集合通过接口定义基本操作,具体实现由各类如ArrayList、HashSet等提供。迭代器允许遍历集合而不暴露其实现细节。List系列集合元素有序且可重复,Set系列元素无序且不可重复。集合遍历可通过迭代器、增强for循环、普通for循环及Lambda表达式实现,各有适用场景。其中ArrayList实现了动态数组功能,可根据需求自动调整大小。
26 11
|
11天前
|
存储 C语言 C++
数据结构基础详解(C语言) 顺序表:顺序表静态分配和动态分配增删改查基本操作的基本介绍及c语言代码实现
本文介绍了顺序表的定义及其在C/C++中的实现方法。顺序表通过连续存储空间实现线性表,使逻辑上相邻的元素在物理位置上也相邻。文章详细描述了静态分配与动态分配两种方式下的顺序表定义、初始化、插入、删除、查找等基本操作,并提供了具体代码示例。静态分配方式下顺序表的长度固定,而动态分配则可根据需求调整大小。此外,还总结了顺序表的优点,如随机访问效率高、存储密度大,以及缺点,如扩展不便和插入删除操作成本高等特点。
|
11天前
|
存储 算法 C语言
C语言手撕数据结构代码_顺序表_静态存储_动态存储
本文介绍了基于静态和动态存储的顺序表操作实现,涵盖创建、删除、插入、合并、求交集与差集、逆置及循环移动等常见操作。通过详细的C语言代码示例,展示了如何高效地处理顺序表数据结构的各种问题。
|
1月前
|
存储 算法
【数据结构与算法】顺序表
【数据结构与算法】顺序表
13 0
【数据结构与算法】顺序表
|
1月前
|
存储 算法
【初阶数据结构篇】顺序表和链表算法题
此题可以先找到中间节点,然后把后半部分逆置,最近前后两部分一一比对,如果节点的值全部相同,则即为回文。
|
1月前
|
存储 测试技术
【初阶数据结构篇】顺序表的实现(赋源码)
线性表(linearlist)是n个具有相同特性的数据元素的有限序列。
|
1月前
|
存储 编译器
【数据结构】顺序表(长期维护)
【数据结构】顺序表(长期维护)
|
1月前
|
存储 缓存
【数据结构】——顺序表与链表
【数据结构】——顺序表与链表
|
9天前
|
存储 人工智能 C语言
数据结构基础详解(C语言): 栈的括号匹配(实战)与栈的表达式求值&&特殊矩阵的压缩存储
本文首先介绍了栈的应用之一——括号匹配,利用栈的特性实现左右括号的匹配检测。接着详细描述了南京理工大学的一道编程题,要求判断输入字符串中的括号是否正确匹配,并给出了完整的代码示例。此外,还探讨了栈在表达式求值中的应用,包括中缀、后缀和前缀表达式的转换与计算方法。最后,文章介绍了矩阵的压缩存储技术,涵盖对称矩阵、三角矩阵及稀疏矩阵的不同压缩存储策略,提高存储效率。