Python 官方文档:入门教程 => 点击学习
目录一、顺序表是什么二、自定义异常空引用异常下标越界异常三、顺序表的方法顺序表的实现获取顺序表长度顺序表是否为空顺序表是否为满打印顺序表末尾新增元素指定位置新增元素判断是否包含某元素
顺序表是用一段物理地址连续的存储单元依次存储数据元素的线性结构,一般情况下采用数组存储。在数组上完成数据的增删查改。
数组不就是一个现场的顺序表吗?但是数组并没有直接向我们提供增删查改的工具,所以我们必须重新实现一下顺序表。
如果我们的顺序表为空时,手动抛出空引用异常
public class NullException extends RuntimeException{
public NullException(String message) {
super(message);
}
}
当我们进行增删查改时,下标越界时,我们手动抛出一个下标越界异常
public class IndexException extends RuntimeException{
public IndexException(String message) {
super(message);
}
}
这里我们定义一个顺序表,默认容量为DEFAULTSIZE,实际大小为usedsize.
public class ArrList {
public int[] arr;
public int usedSize;
public static final int DEFAULTSIZE = 10;
public ArrList() {
this.arr = new int[DEFAULTSIZE];
}
}
usedSize存储的就是当前顺序表的长度,直接返回即可。
public int size() {
return this.usedSize;
}
此方法我们只想在顺序表内部使用,所以我们定义为private.
private boolean isEmpty() {
return this.arr == null;
}
此方法我们只想在顺序表内部使用,所以我们定义为private.
private boolean isFull() {
//如果数组所放元素大于等于数组长度,那么数组满了
return this.size() >= this.arr.length;
}
public void display() {
for (int i = 0; i < this.usedSize; i++) {
System.out.print(arr[i]+" ");
}
System.out.println();
}
public void add(int data) throws NullException{
//1.数组为空,报空异常
if(isEmpty()) {
throw new NullException("数组为空");
}
//2.数组满了,先增容
if(isFull()) {
this.arr = new int[2 * this.arr.length];
}
//3.进行新增
this.arr[this.usedSize] = data;
//4.元素+1
this.usedSize++;
}
public void add(int pos, int data) throws RuntimeException,IndexException{
//1.判断数组是否为空
if(isEmpty()) {
throw new NullException("数组为空");
}
//2.判断新增位置是否合法,抛数组越界异常
if(pos < 0 || pos > this.arr.length) {
throw new IndexException("数组越界");
}
//3.判断数组是否已满,进行扩容
if(isFull()) {
this.arr = new int[2 * this.arr.length];
}
//4.进行新增
for (int i = this.usedSize - 1; i >= pos; i--) {
this.arr[i+1] = this.arr[i];
}
this.arr[pos] = data;
this.usedSize++;
}
public boolean contains(int toFind) {
for (int i = 0; i < this.usedSize; i++) {
if(toFind == this.arr[i]) {
return true;
}
}
return false;
}
public int indexOf(int toFind) {
for (int i = 0; i < this.usedSize; i++) {
if(toFind == this.arr[i]) {
return i;
}
}
return -1;
}
public int get(int pos) throws IndexException{
//判断pos位置是否合法
if(pos < 0 || pos >= this.usedSize) {
throw new IndexException("输入pos位置数组越界");
}else {
return this.arr[pos];
}
}
public void set(int pos, int value) throws NullException,IndexException{
if(isEmpty()) {
throw new NullException("数组为空");
}
//2.判断新增位置是否合法,抛数组越界异常
if(pos < 0 || pos >= this.arr.length) {
throw new IndexException("数组越界");
}
this.arr[pos] = value;
}
public void remove(int toRemove) throws NullException{
if(isEmpty()) {
throw new NullException("数组为空");
}
int ret = indexOf(toRemove);
if(ret == -1) {
System.out.println("不存在此数");
return;
}
if(ret != -1) {
for (int i = ret; i < this.usedSize - 1; i++) {
this.arr[i] = this.arr[i+1];
}
}
this.usedSize++;
}
public void clear() {
this.usedSize = 0;
//如果为引用类型
// for (int i = 0; i < size(); i++) {
// this.arr[i] = null;
// }
// this.usedSize = 0;
}
}
public class ArrList {
public int[] arr;
public int usedSize;
public static final int DEFAULTSIZE = 10;
public ArrList() {
this.arr = new int[DEFAULTSIZE];
}
// 打印顺序表
public void display() {
for (int i = 0; i < this.usedSize; i++) {
System.out.print(arr[i]+" ");
}
System.out.println();
}
// 新增元素,默认在数组最后新增
public void add(int data) throws NullException{
//1.数组为空,报空异常
if(isEmpty()) {
throw new NullException("数组为空");
}
//2.数组满了,先增容
if(isFull()) {
this.arr = new int[2 * this.arr.length];
}
//3.进行新增
this.arr[this.usedSize] = data;
//4.元素+1
this.usedSize++;
}
private boolean isFull() {
//如果数组所放元素大于等于数组长度,那么数组满了
return this.size() >= this.arr.length;
}
private boolean isEmpty() {
return this.arr == null;
}
// 在 pos 位置新增元素
public void add(int pos, int data) throws RuntimeException,IndexException{
//1.判断数组是否为空
if(isEmpty()) {
throw new NullException("数组为空");
}
//2.判断新增位置是否合法,抛数组越界异常
if(pos < 0 || pos > this.arr.length) {
throw new IndexException("数组越界");
}
//3.判断数组是否已满,进行扩容
if(isFull()) {
this.arr = new int[2 * this.arr.length];
}
//4.进行新增
for (int i = this.usedSize - 1; i >= pos; i--) {
this.arr[i+1] = this.arr[i];
}
this.arr[pos] = data;
this.usedSize++;
}
// 判定是否包含某个元素
public boolean contains(int toFind) {
for (int i = 0; i < this.usedSize; i++) {
if(toFind == this.arr[i]) {
return true;
}
}
return false;
}
// 查找某个元素对应的位置
public int indexOf(int toFind) {
for (int i = 0; i < this.usedSize; i++) {
if(toFind == this.arr[i]) {
return i;
}
}
return -1;
}
// 获取 pos 位置的元素
public int get(int pos) throws IndexException{
//判断pos位置是否合法
if(pos < 0 || pos >= this.usedSize) {
throw new IndexException("输入pos位置数组越界");
}else {
return this.arr[pos];
}
}
// 给 pos 位置的元素设为 value
public void set(int pos, int value) throws NullException,IndexException{
if(isEmpty()) {
throw new NullException("数组为空");
}
//2.判断新增位置是否合法,抛数组越界异常
if(pos < 0 || pos >= this.arr.length) {
throw new IndexException("数组越界");
}
this.arr[pos] = value;
}
//删除第一次出现的关键字key
public void remove(int toRemove) throws NullException{
if(isEmpty()) {
throw new NullException("数组为空");
}
int ret = indexOf(toRemove);
if(ret == -1) {
System.out.println("不存在此数");
return;
}
if(ret != -1) {
for (int i = ret; i < this.usedSize - 1; i++) {
this.arr[i] = this.arr[i+1];
}
}
this.usedSize++;
}
// 获取顺序表长度
public int size() {
return this.usedSize;
}
// 清空顺序表
public void clear() {
this.usedSize = 0;
//如果为引用类型
// for (int i = 0; i < size(); i++) {
// this.arr[i] = null;
// }
// this.usedSize = 0;
}
}
以上就是Java实现顺序表的操作详解的详细内容,更多关于Java顺序表的资料请关注编程网其它相关文章!
--结束END--
本文标题: Java实现顺序表的操作详解
本文链接: https://www.lsjlt.com/news/167866.html(转载时请注明来源链接)
有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341
下载Word文档到电脑,方便收藏和打印~
2024-03-01
2024-03-01
2024-03-01
2024-02-29
2024-02-29
2024-02-29
2024-02-29
2024-02-29
2024-02-29
2024-02-29
回答
回答
回答
回答
回答
回答
回答
回答
回答
回答
0