如何使用Java实现顺序表的操作
发表于:2025-01-20 作者:千家信息网编辑
千家信息网最后更新 2025年01月20日,小编给大家分享一下如何使用Java实现顺序表的操作,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!具体内容如下静态顺序表:使
千家信息网最后更新 2025年01月20日如何使用Java实现顺序表的操作
小编给大家分享一下如何使用Java实现顺序表的操作,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!
具体内容如下
静态顺序表:使用定长数组存储。
动态顺序表:使用动态开辟的数组存储。
接口
package com.github.sqlist;public interface ISequence { // 在 pos 位置插入 val boolean add(int pos, Object data); // 查找关键字 key 找到返回 key 的下表,没有返回 -1 int search(Object key); // 查找是否包含关键字 key 是否在顺序表当中(这个和search有点冲突) boolean contains(Object key); // 得到 pos 位置的值 Object getPos(int pos); // 删除第一次出现的关键字 key Object remove(Object key); // 得到顺序表的长度 int size(); // 打印顺序表 void display(); // 清空顺序表以防内存泄漏 void clear();}
实现接口里的每个方法
package com.github.sqlist;import java.util.Arrays;/* * 顺序表 */public class MySequenceImpl implements ISequence { private Object[] elem; // 有效数据个数 private int usedSize; private static final int DEFAULT_SIZE = 10; public SqList() { this.elem = new Object[DEFAULT_SIZE]; this.usedSize = 0; } /** * 判断是否为满 * @return 满了返回true,否则返回false */ private boolean isFull() { return this.elem.length == this.usedSize; } /** * 在 pos 位置插入 val * @param pos * 要插入的位置 * @param data * 要插入的值 * @return * 插入成功返回true,否则返回false */ @Override public boolean add(int pos, Object data) { // 1. 判断pos位置的合法性 if (pos < 0 || pos > this.elem.length) { return false; } // 2. 判断是否满了,如果满了进行扩容 if (isFull()) { this.elem = Arrays.copyOf(this.elem, 2*this.elem.length); } // 3. 把pos位置以及之后的数全部向后挪一个位置 for (int i = this.usedSize-1; i >= pos; i--) { this.elem[i+1] = this.elem[i]; } // 4. 在 pos 位置插入 val this.elem[pos] = data; // 5. 更新长度 this.usedSize++; return true; } /** * 判断是否为空 * @return 表为空返回true,否则返回false */ private boolean isEmpty() { return this.usedSize == 0; } /** * 查找关键字 key 找到返回 key 的下表,没有返回 -1 * @param key 关键字的值 * @return 查找成功返回true,失败返回false */ @Override public int search(Object key) { // 1. 判断是否为空 if (isEmpty()) { return -1; } // 2. 遍历查找 for (int i = 0; i < this.elem.length; i++) { // 注意:判断条件不能写成:this.elem[i] == key if (this.elem[i].equals(key)) { return i; } } return -1; } /** * 查找是否包含关键字 key 是否在顺序表当中(这个和search有点冲突) * @param key 关键字的值 * @return 查找成功返回true,失败返回false */ @Override public boolean contains(Object key) { // 1. 判断是否为空 if (isEmpty()) { return false; } // 2. 遍历查找 for (int i = 0; i < this.elem.length; i++) { // 注意:判断条件不能写成:this.elem[i] == key if (this.elem[i].equals(key)) { return true; } } return false; } /** * 得到 pos 位置的值 * @param pos 得到的值的位置 * @return 成功得到 pos位置的值返回true,否则返回false */ @Override public Object getPos(int pos) { // 1. 判断位置是否合法 if (pos<0 || pos>=this.elem.length) { return null; } // 2. 位置合法 return this.elem[pos]; } /** * 删除第一次出现的关键字 key * @param key 关键字 * @return */ @Override public Object remove(Object key) { // 1. 先查表看有没有这个关键字 // index:关键字下标 int index = search(key); // 2. 若表里没有这个关键字 if (index == -1) { return null; } // 3. 表里有这个关键字 Object data = this.elem[index]; int i; // 删除第一次出现的关键字 key,把key后面的数全部向前挪一个位置 for (i = index; i < this.usedSize; i++) { elem[i] = elem[i+1]; } this.usedSize--; this.elem[i+1] = null; return data; } /** * 得到顺序表的长度 * @return 顺序表的长度 */ @Override public int size() { return this.usedSize; } /** * 打印顺序表 */ @Override public void display() { for (int i = 0; i < this.usedSize; i++) { System.out.print(this.elem[i] + " "); } System.out.println(); } /** * 清空顺序表以防内存泄漏 */ @Override public void clear() { for (int i = 0; i < this.usedSize; i++) { this.elem[i] = null; } }}
测试方法的正确性
package com.github.sqlist;public class TestDemo1 { public static void main(String[] args) { MySequenceImpl mySequence = new MySequenceImpl(); for (int i = 0; i < 10; i++) { mySequence.add(i,i); } System.out.println("在最大值10的范围内插入数据:"); mySequence.display(); System.out.println(); for (int i = 10; i < 20; i++) { mySequence.add(i,i); } System.out.println("扩容:"); mySequence.display(); System.out.println(); System.out.println("随机位置插入数据:"); mySequence.add(9,"list"); mySequence.display(); System.out.println(); System.out.println("search查找一个数据:"+mySequence.search("list")); System.out.println("contains查找一个数据:"+mySequence.contains("list")); System.out.println(); System.out.println("查找某一个位置对应的值:"+mySequence.getPos(9)); System.out.println(); System.out.println("删除一个数据:"+mySequence.remove(8)); mySequence.display(); System.out.println(); System.out.println("得到顺序表的长度:"+mySequence.size()); }}
测试结果:
以上是"如何使用Java实现顺序表的操作"这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注行业资讯频道!
位置
顺序
关键
关键字
数据
长度
成功
合法
内容
第一次
篇文章
内存
动态
接口
数组
方法
条件
表里
冲突
存储
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
韩国ka高防服务器
江苏通用软件开发定做价格
wps表格和数据库
我国网络安全发展成就综述
大华c9100自带数据库
矿产规划数据库建设存在的问题
gmod僵尸感染服务器
用友pdm数据库字典
文本情感分析数据库
商用服务器价格
中国海洋大学网络安全导师
软件开发主要
石家庄网络技术招聘
er图设计数据库实训总结
本课介绍网络安全的内容包括
网络安全技术的用途的书籍
软件开发和测试环境维护管理办法
怀仁市公安局网络安全大队长
基岩版如何加入外部服务器
服务器和cpu一起玩
服务器显示屏出现广告怎么办
国企软件开发需要学位证
网络安全产业破局
仅装数据库软件
基于数据库的图像识别技术
西安网络安全周嘉宾
数据库中取反
查看数据库表索引的命令
物联网是网络技术经验吗
网络安全是一种动态的管理过程