美文网首页
五、Java数据结构-顺序表(SequenceList)

五、Java数据结构-顺序表(SequenceList)

作者: daley_磊 | 来源:发表于2021-04-01 22:26 被阅读0次

什么是顺序表

顺序表是在计算机内存中以数组的形式保存的线性表,线性表的顺序存储是指用一组地址连续的存储单元,依次存储线性表中的各个元素、使得线性表中再逻辑结构上响铃的数据元素存储在相邻的物理存储单元中,即通过数据元素物理存储的相邻关系来反映数据元素之间逻辑上的相邻关系;
常见的如数组:


在Java中顺序表一般体现为两种 数组 与 集合,数组是固定长度的顺序表,集合是动态长度的顺序表,这里实现动态长度的顺序表;

顺序表的实现(直接上代码)

类名 SequenceList
成员方法 1.public void clear():清空顺序表
2.publicboolean isEmpty():判断顺序表是否为空,是返回true,否返回false
3.public int length():获取顺序表中元素的个数
4.public T get(int i):读取并返回顺序表中的第i个元素的值
5.public void insert(T t):往顺序表中添加一个元素;
6.public void insert(int i,T t):在顺序表的第i个元素之前插入一个值为t的数据元素。
7.public T remove(int i):删除并返回顺序表中第i个数据元素。
8.public int indexOf(T t):返回顺序表中首次出现的指定的数据元素的位序号,若不存在,则返回-1
成员变量 1.private T [] eles:存储元素的数组
2.private int N:记录顺序表的长度
3. private int modCount : 记录顺序表的操作次数

public class SequenceList<T>  implements Iterable<T>{
    private  T[] eles;
    private int N;
    private int modCount;
    public SequenceList(){
//        this.eles =(T[]) new Object[1];
        this.N = 0;
    }
    public void clear(){
        modCount ++;
        for (int i = 0;i<this.N;i++) {
            eles[i] = null;
        }
        this.N = 0;
    }
    public boolean isEmpty(){
        return this.N==0;
    }
    public int length(){
        return this.N;
    }

    public T get(int index){
        if(index<0 || index>this.N){
            System.out.println("异常");
            return null;
        }
        return  this.eles[index];
    }

    public void insert(T t){
        this.modCount++;
        ensureCapacityInternal(this.N+1);
        this.eles[this.N++] = t;
    }

    public void insert(int index,T t){
        this.modCount++;
        if(index<0|| index>this.N){
            System.out.println("异常");
            return;
        }
        ensureCapacityInternal(this.N+1);
        for (int i = this.N; i>index; i--) {
            this.eles[i]= this.eles[i-1];
        }
        this.eles[this.N++] = t;
    }
    public T remove(int index){
        this.modCount++;
        if(index<=0|| index>this.N){
            System.out.println("异常");
            return null;
        }
        T t = eles[index];
        for (int i = index; i<this.N-1; i++) {
            this.eles[i]= this.eles[i+1];
        }
        ensureCapacityInternal(--this.N);
        return t;
    }

    private void ensureCapacityInternal(int minCapacity){
        if(this.N == 0){
            this.eles =  (T []) new Object[minCapacity];
        }else{
            T[] temp =  (T []) new Object[minCapacity];
            int num = minCapacity;
            if(num >this.eles.length){
                num =this.eles.length;
            }
            System.arraycopy(this.eles,0,temp,0,num);
            this.eles = temp;
        }

    }
    public int indexOf(T t){
        for (int i = 0; i < this.N; i++) {
            if(this.eles[i].equals(t)){
                return i;
            }
        }
        return -1;
    }

    @Override
    public Iterator<T> iterator() {
        return new MyIterator();
    }
    private  class MyIterator implements Iterator<T>{
        private  int cur ;
        private  int num;
        public MyIterator(){
            this.cur = 0;
            this.num = modCount;
        }
        @Override
        public boolean hasNext() {
            checkModCount();
            return cur< N;
        }

        @Override
        public T next() {
            checkModCount();
            return eles[cur++];
        }
        private void checkModCount(){
            if(this.num != modCount){
                throw new RuntimeException("不合法的操作,在遍历元素时修改数据是不安全的!");
            }
        }
    }
}

相关文章

  • 五、Java数据结构-顺序表(SequenceList)

    什么是顺序表 顺序表是在计算机内存中以数组的形式保存的线性表,线性表的顺序存储是指用一组地址连续的存储单元,依次存...

  • Java 数据结构 单向链表

    Java 数据结构 单向链表 基础介绍 链表与循序表都是同属于数据结构中顺序表中的一种,而它与循序表的不同就在于 ...

  • 数据结构之Java List

    本文从线性数据结构顺序表与链表开始分析Java中ArrayList与LinkedList的实现,最后对Java L...

  • ArrayList源码学习(1)

    数据结构定义 从数据结构的角度来说,ArrayList是线性表基于java的顺序表示和实现,数据结构中定义其是一组...

  • 线性表的链式存储结构Java实现

    有了前面文章的铺垫:数据结构的基本理解线性表及其顺序存储结构的理解线性表的顺序存储结构java实现线性表链式存储就...

  • 线性表的顺序存储结构(SequenceList)

    前言 线性表的顺序存储是指用一组连续的存储单元依次存储线性表中的各个元素,使得线性表中在逻辑上相邻的数据元素存储在...

  • 【JAVA】复习数据结构——顺序表

    最近需要复习数据结构和算法,数据结构曾经上课好好学过的,不过现在很多都忘记了,所以决定专门开个专题给数据结构和算法...

  • 【数据结构】线性表之单链表

    完整代码需结合前面一篇顺序表数据结构学习-线性表之顺序表各种操作网易云课堂小甲鱼课程链接:数据结构与算法 线性表的...

  • 2.6 数据结构 --1.4 链表

    数据结构子目录https://www.jianshu.com/p/a344fa483655 顺序表 顺序表按照存储...

  • 顺序表(泛型类顺序表深拷贝的真正实现)

    学习数据结构(Java版)发现的一些知识点 顺序表 首先线性表是由n(n >= 0)个类型相同的数据元素组成的有限...

网友评论

      本文标题:五、Java数据结构-顺序表(SequenceList)

      本文链接:https://www.haomeiwen.com/subject/vaiuhltx.html