文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

如何使用Java实现顺序表的操作

2023-06-28 18:19

关注

小编给大家分享一下如何使用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;    }        private boolean isFull() {        return this.elem.length == this.usedSize;    }        @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;    }        private boolean isEmpty() {        return this.usedSize == 0;    }        @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;    }        @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;    }        @Override    public Object getPos(int pos) {        // 1. 判断位置是否合法        if (pos<0 || pos>=this.elem.length) {            return null;        }        // 2. 位置合法        return this.elem[pos];    }        @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;    }        @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实现顺序表的操作

以上是“如何使用Java实现顺序表的操作”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注编程网行业资讯频道!

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯