广告
返回顶部
首页 > 资讯 > 后端开发 > Python >Java中ArrayList与顺序表的定义与实现方法
  • 207
分享到

Java中ArrayList与顺序表的定义与实现方法

2024-04-02 19:04:59 207人浏览 泡泡鱼

Python 官方文档:入门教程 => 点击学习

摘要

目录1、线性表定义特征2、顺序表定义实现打印数组新增元素判断是否包含某个元素查找元素获取pos位置的元素更改pos位置的值删除操作获取顺序表长度清空顺序表3、ArrayList简介:

1、线性表

定义

线性表是最基本、最简单、也是最常用的一种数据结构。线性表(linear list)是数据结构的一种,一个线性表是n个具有相同特性的数据元素的有限序列。

常见的线性表:顺序表、链表、栈、队列...

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

特征

  • 集合中必存在唯一的一个“第一元素”。
  • 集合中必存在唯一的一个 “最后元素” 。
  • 除最后一个元素之外,均有唯一的后继(后件)。
  • 除第一个元素之外,均有唯一的前驱(前件)。

2、顺序表

定义

顺序表是用一段物理地址连续的存储单元依次存储数据元素的线性结构,一般情况下采用数组存储。在数组上完成数据的增删查改。

实现

首先我们需要创建一个数组来存放数据。

备注:因为我为了方便就先创建的整形数组,为了能更好的适应各种类型,大家可以创建泛型的数组,我这里就没写了。

接下来就是对顺序表的各种操作。例如:基本的CURD,打印顺序表,获取顺序表长度,清空顺序表等等。

打印数组

因为是数组,所以直接遍历数组打印就好了

新增元素

增加元素的时候需要考虑到数组是否满状态的问题,所以我们需要判断,要死数组空间已满,我们还需要进行扩容。另外,我们还需要判断在这个pos位置是否合法。

判断空间是否已满方法

这里我们简化代码为:

如果要扩容的话,在扩容完成之后,因为顺序表是连续的结构,所以在pos位置新增元素的话,那么pos位置之后的元素就要依次往后挪。这样才能把元素新增进去。

 注意:在扩容之后我们需要更改CAPACITY和usedSize的大小。

判断是否包含某个元素

在这我们需要考虑到此时数组是否为空的情况。

之后还是直接遍历数组的操作。

查找元素

在这里也需要一次判空操作。

获取pos位置的元素

这里可能会出现数组为空的情况和pos不合法的情况,所以需要判断。

我这里是手动抛出的异常,没有另外写了。

更改pos位置的值

删除操作

删除某个位置上的元素,这里是直接从这个元素开始,让其后面的元素覆盖掉他前一个元素,以达到删除的目的。

获取顺序表长度

清空顺序表

后面这几个操作比较简单就不多叙述了。

3、ArrayList

简介:

在集合框架中,ArrayList是一个普通的类,实现了List接口,具体框架图如下:

[说明]

  1. ArrayList实现了RandoMaccess接口,表明ArrayList支持随机访问。
  2. ArrayList实现了Cloneable接口,表明ArrayList是可以clone的。
  3. ArrayList实现了Serializable接口,表明ArrayList是支持序列化的。
  4. 和Vector不同,ArrayList不是线程安全的,在单线程下可以使用,在多线程中可以选择Vector或者CopyOnWriteArrayList。
  5.  ArrayList底层是一段连续的空间,并且可以动态扩容,是一个动态类型的顺序表。

使用

 public static void main(String[] args) {
        // ArrayList创建,推荐写法
        // 构造一个空的列表
        List<Integer> list1 = new ArrayList<>();
 
        // 构造一个具有10个容量的列表
        List<Integer> list2 = new ArrayList<>(10);
        list2.add(1);
        list2.add(2);
        list2.add(3);
 
        // list2.add("hello"); // 编译失败,List<Integer>已经限定了,list2中只能存储整形元素
        // list3构造好之后,与list中的元素一致
        ArrayList<Integer> list3 = new ArrayList<>(list2);
 
        // 避免省略类型,否则:任意类型的元素都可以存放,使用时将是一场灾难
        List list4 = new ArrayList();
        list4.add("111");
        list4.add(100);
    }

 一些常见方法

方法解释
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

 ArrayList的遍历

循环遍历

foreach遍历

迭代器

        System.out.println("======迭代器1=========");
 
        ElementObservableListDecorator<Object> list;
        Iterator<String> it =  list.iterator();
        while (it.hasNext()) {
            System.out.println(it.next());
        }
        System.out.println("======迭代器2=========");
        ListIterator<String> it2 =  list.listIterator();
        while (it2.hasNext()) {
            System.out.println(it2.next());
        }

顺序表和数组的区别:

上面说,顺序表的底层可以理解为一个数组,但是相比于数组,更加的高级。

顺序表可以自己扩容;

顺序表严格区分数组容量和元素的个数。

所以数组其实就是一种不完备的顺序表。

顺序表中的注意点:

  • 我们需要区分顺序表中的两个概念:容量(capacity)和元素个数(size)。
  • 容量可以理解为数组的大小(长度),元素个数是size中记录的有效元素个数。
  • 顺序表中,数据的存储是需要连续的,不可以元素和元素之间存在“空隙”,当进行插入、删除等操作时,操作完成后,也要保证顺序表的连续。

总结

到此这篇关于Java中ArrayList与顺序表的定义与实现的文章就介绍到这了,更多相关Java ArrayList与顺序表内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: Java中ArrayList与顺序表的定义与实现方法

本文链接: https://www.lsjlt.com/news/165247.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Java中ArrayList与顺序表的定义与实现方法
    目录1、线性表定义特征2、顺序表定义实现打印数组新增元素判断是否包含某个元素查找元素获取pos位置的元素更改pos位置的值删除操作获取顺序表长度清空顺序表3、ArrayList简介:...
    99+
    2022-11-13
  • Java中ArrayList与顺序表的概念与使用实例
    目录前言泛型(Generic)泛型的引入泛型的基本概念包装类(Wrapper Class)包装类的引入基本数据类型与包装类的对应关系ArrayList与顺序表ArrayList简介A...
    99+
    2022-11-12
  • Java超详细讲解ArrayList与顺序表的用法
    目录简要介绍Arraylist容器类的使用Arraylist容器类的构造ArrayList的常见方法ArrayList的遍历ArrayList中的扩容机制简要介绍 顺序表是一段物理地...
    99+
    2022-11-13
  • Java接口定义与实现方法分析
    本文实例讲述了Java接口定义与实现方法。分享给大家供大家参考,具体如下:在java中,我们可以通过继承得到另一个类中的方法,但是这个仅仅满足继承一个方法,那有办法可以多个继承不,就好比,我们人类的基因,总有一部分是继承爸爸,一部分是继承妈...
    99+
    2023-05-30
    java 接口 ava
  • Java线性表的顺序表示及实现方法
    本篇内容介绍了“Java线性表的顺序表示及实现方法”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!一、什么是顺序表?顺序表是在计算机内存中以数...
    99+
    2023-07-02
  • MySQL中表索引定义的方法与介绍
    概述 索引是 DBMS 根据表中的一列或若干列按一定的顺序建立的列值与记录行之间的对应关系表,方便 DBA 管理 索引是以文件的形式存储,DBMS 将一张表的所有所有保存在同一个索引文件中,需要占用磁...
    99+
    2022-10-18
  • 表中序列正确的定义方式(表与序列的粘连配置)
    在以数据库指定表方式导出表序列、结构和数据时,发生表结构和数据被导出,序列没有被导出,于是整理了一下说明了序列的正确创建方式一、序列创建方法1.serial primary key方式建立序列 t...
    99+
    2022-10-18
  • C++类的定义与实现方法是什么
    这篇文章主要讲解了“C++类的定义与实现方法是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“C++类的定义与实现方法是什么”吧!一、类的定义根据C++ Primer中的描述,类的定义是一...
    99+
    2023-06-22
  • Java数据结构之栈的基本定义与实现方法示例
    本文实例讲述了Java数据结构之栈的基本定义与实现方法。分享给大家供大家参考,具体如下:一、概述:1、基本概念:栈是一种数据结构,是只能在某一端插入和删除的特殊线性表。它按照后进先出的原则存储数据,先进入的数据被压入栈底,最后的数据在栈顶,...
    99+
    2023-05-30
    java 数据结构
  • wxpython中自定义事件的实现与使用方法分析
    本文实例讲述了wxpython中自定义事件的实现与使用方法。分享给大家供大家参考,具体如下: 创建自定义事件的步骤: ① 定义事件类,该事件类必须继承自wx.PyCommandEvent,并定义get和se...
    99+
    2022-06-04
    自定义 使用方法 事件
  • Python的“二维”字典 (two-dimension dictionary)定义与实现方法
    本文实例讲述了Python的“二维”字典 (two-dimension dictionary)定义与实现方法。分享给大家供大家参考,具体如下: Python 中的dict可以实现迅速查找。那么有没有像数组有...
    99+
    2022-06-04
    字典 定义 方法
  • python中绑定方法与非绑定方法的实现示例
    目录一:绑定方法:其特点是调用方本身自动作为第一个参数传入二:非绑定方法,静态方法一:绑定方法:其特点是调用方本身自动作为第一个参数传入 1.绑定到对象的方法:调用方是一个对象,该对...
    99+
    2022-11-12
  • java数据结构中单链表与双向链表的实现方法
    这篇文章主要介绍“java数据结构中单链表与双向链表的实现方法”,在日常操作中,相信很多人在java数据结构中单链表与双向链表的实现方法问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”java数据结构中单链表与...
    99+
    2023-06-20
  • Java实现自定义Excel数据排序的方法详解
    目录1.引入jar包2.自定义排序通常,我们可以在Excel中对指定列数据执行升序或者降序排序,排序时可依据单元格中的数值、单元格颜色、字体颜色或图标等。在需要自定义排序情况下,我们...
    99+
    2022-11-13
  • Java实现英文句子中的单词顺序逆序输出的方法
    本文实例讲述了Java实现英文句子中的单词顺序逆序输出的方法。分享给大家供大家参考,具体如下:题目要求:给定n行的英文句子,要求输出句子中逆序单词后的句子,如:输入:n=3I love youHow are youMy name is Li...
    99+
    2023-05-30
  • java中静态代码块与构造方法执行顺序判断的示例分析
    这篇文章将为大家详细讲解有关java中静态代码块与构造方法执行顺序判断的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。静态代码优先于非静态的代码,是因为被static修饰的成员都是类成员,会随着J...
    99+
    2023-05-30
    java
  • Vue.js中class与style的增强绑定实现方法
    目录一、v-bind绑定class属性(1)绑定class样式,字符串写法(2)绑定class样式,数组写法(3)绑定class样式,对象写法二、v-bind绑定内联样式style(...
    99+
    2023-05-16
    Vue.js class与style绑定 Vue.js class与style
  • Java中字符序列的替换与分解的几种实现方法
    目录一、使用String类二、使用StringTokenizer类三、使用Scanner类四、使用Pattern类与Matcher类一、使用String类 String对象调用pub...
    99+
    2022-11-13
  • php+mysql实现的无限分类方法类定义与使用示例
    本文实例讲述了php+mysql实现的无限分类方法类定义与使用。分享给大家供大家参考,具体如下: 创建数据库以及表 CREATE DATABASE `sortclass`DEFAULT CHARSET utf8...
    99+
    2022-05-23
    php mysql 无限分类 方法类
  • Android开发中方向传感器定义与用法详解【附指南针实现方法】
    本文实例讲述了Android开发中方向传感器定义与用法。分享给大家供大家参考,具体如下:Android中的方向传感器在生活中是一个很好的应用,典型的例子是指南针的使用,我们先来简单介绍一下传感器中三个参数x,y,z的含义,以一幅图来说明。补...
    99+
    2023-05-30
    android 方向传感器 指南针
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作