建一个网站需要什么,网络推广软件赚钱,网页心得体会400字,西安网站建设畅网Java顺序表 前言一、线性表介绍常见线性表总结图解 二、顺序表概念顺序表的分类顺序表的实现throw具体代码 三、顺序表会出现的问题 前言
推荐一个网站给想要了解或者学习人工智能知识的读者#xff0c;这个网站里内容讲解通俗易懂且风趣幽默#xff0c;对我帮助很大。我想与… Java顺序表 前言一、线性表介绍常见线性表总结图解 二、顺序表概念顺序表的分类顺序表的实现throw具体代码 三、顺序表会出现的问题 前言
推荐一个网站给想要了解或者学习人工智能知识的读者这个网站里内容讲解通俗易懂且风趣幽默对我帮助很大。我想与大家分享这个宝藏网站请点击下方链接查看。 https://www.captainbed.cn/f1
Java顺序表是Java中实现线性表结构的一种方式它采用数组来存储元素通过下标访问元素具有快速访问和修改特定位置元素的特点但插入和删除操作可能涉及较多元素的移动。 一、线性表
介绍
线性表linear list是n个具有相同特性的数据元素的有限序列。
线性表在逻辑上是线性结构也就说是连续的一条直线。但是在物理结构上并不一定是连续的线性表在物理上存储时通常以数组和链式结构的形式存储。
常见线性表
线性表是一种在实际中广泛使用的数据结构常见的线性表顺序表、链表、栈、队列、字符串…
总结
线性表是一种数据结构由一组有序的元素组成元素之间具有线性关系。线性表中的元素可以是任意类型的数据每个元素都有一个前驱元素和一个后继元素除了第一个和最后一个元素。线性表可以用于存储和操作一系列有序的数据。常见的线性表有数组、链表、栈和队列等。
图解 二、顺序表
概念
顺序表是用一段物理地址连续的存储单元依次存储数据元素的线性结构一般情况下采用数组存储。在数组上完成数据的增删查改。
顺序表的分类
顺序表一般可以分为
静态顺序表使用定长数组存储。动态顺序表使用动态开辟的数组存储。
静态顺序表适用于确定知道需要存多少数据的场景.
静态顺序表的定长数组导致N定大了空间开多了浪费开少了不够用.相比之下动态顺序表更灵活, 根据需要动态的分配空间大小.
顺序表的实现
throw
在Java中throw关键字用于抛出异常。throw语句必须在方法体内部使用并且后面跟着一个异常对象如下所示
throw new Exception(异常信息);throw语句会立即终止当前方法的执行并将异常抛给调用者处理。如果没有被捕获的异常将会导致程序终止。
在自定义类中可以通过继承Exception类或其子类来创建自定义异常类。可以在方法中使用throw关键字抛出自定义异常对象如下所示
public void someMethod() throws CustomException {if (条件) {throw new CustomException(异常信息);}
}在调用方代码中可以使用try-catch语句块来捕获和处理异常如下所示
try {someMethod();
} catch (CustomException e) {// 处理异常逻辑
}使用throw语句可以将异常主动抛出从而提供更丰富的异常处理能力。
具体代码
public class SeqList {private int[] arr; // 存储顺序表的数组private int size; // 记录顺序表中元素的个数// 构造函数public SeqList(int capacity) {arr new int[capacity];size 0;}// 打印顺序表public void display() {for (int i 0; i size; i) {System.out.print(arr[i] );}System.out.println();}// 在pos位置新增元素public void add(int pos, int data) {if (pos 0 || pos size) {// 位置不合法throw new IllegalArgumentException(Invalid position);}if (size arr.length) {// 数组已满需要扩容int[] newArr new int[arr.length * 2];System.arraycopy(arr, 0, newArr, 0, size);arr newArr;}// 将pos位置及之后的元素后移for (int i size - 1; i pos; i--) {arr[i 1] arr[i];}// 插入新元素arr[pos] data;size;}// 判定是否包含某个元素public boolean contains(int toFind) {for (int i 0; i size; i) {if (arr[i] toFind) {return true;}}return false;}// 查找某个元素对应的位置public int search(int toFind) {for (int i 0; i size; i) {if (arr[i] toFind) {return i;}}return -1;}// 获取pos位置的元素public int getPos(int pos) {if (pos 0 || pos size) {// 位置不合法throw new IllegalArgumentException(Invalid position);}return arr[pos];}// 给pos位置的元素设为valuepublic void setPos(int pos, int value) {if (pos 0 || pos size) {// 位置不合法throw new IllegalArgumentException(Invalid position);}arr[pos] value;}// 删除第一次出现的关键字keypublic void remove(int toRemove) {int index search(toRemove);if (index -1) {// key不存在return;}// 将index位置及之后的元素前移for (int i index 1; i size; i) {arr[i - 1] arr[i];}size--;}// 获取顺序表长度public int size() {return size;}// 清空顺序表public void clear() {size 0;}
}这是一个实现顺序表的Java类。顺序表是一种线性表使用数组存储元素通过下标访问元素。该类提供了一系列操作顺序表的方法。
构造函数创建一个指定容量的顺序表并初始化大小为0。display()方法打印顺序表中的所有元素。add(int pos, int data)方法在指定位置插入一个新元素。如果位置不合法抛出IllegalArgumentException异常。如果数组已满需要扩容。contains(int toFind)方法判断顺序表中是否包含某个元素。search(int toFind)方法查找某个元素的位置。如果找到返回该元素的位置否则返回-1。getPos(int pos)方法获取指定位置的元素。如果位置不合法抛出IllegalArgumentException异常。setPos(int pos, int value)方法将指定位置的元素设为新值。如果位置不合法抛出IllegalArgumentException异常。remove(int toRemove)方法删除顺序表中第一次出现的指定元素。如果元素不存在不进行任何操作。size()方法获取顺序表的大小。clear()方法清空顺序表。
这些方法可以帮助我们对顺序表进行插入、删除、查询和修改等操作。
三、顺序表会出现的问题
顺序表中间/头部的插入删除时间复杂度为O(N)增容需要申请新空间拷贝数据释放旧空间。会有不小的消耗。增容一般是呈2倍的增长势必会有一定的空间浪费。例如当前容量为100满了以后增容到200我们再继续插入了5个数据后面没有数据插入了那么就浪费了95个数据空间。