美文网首页
Java 顺序表的简单实现

Java 顺序表的简单实现

作者: 蒹葭流 | 来源:发表于2017-09-03 23:09 被阅读32次
/**
 * Description 顺序表
 * Date 2017-09-02
 * Author Edgar
 */
public class Sequence<E> {
    //存储元素的数组
    private Object[] elem;
    //数组的容量
    private int capacity;
    //顺序表的实际大小
    private int size;

    public Sequence(int capacity){
        if (capacity<0){
            throw new RuntimeException("初始容量不能小于0");
        }
        this.capacity=capacity;
        elem=new Object[capacity];
        size =0;
    }

    public Sequence(){
       this(10);
    }

    /**
     * 获取指定位置的元素
     * @param index
     * @return
     */
    public E get(int index){
        checkIndexBounds(index);
        return (E) elem[index];
    }

    /**
     * 查找某元素在顺序表中是否存在
     * @param e
     * @return 存在则返回下标,否则返回-1
     */
    public int find(E e){
        for (int i = 0; i < size; i++) {
            if (elem[i]==e){
                return i;
            }
        }
        return -1;
    }

    /**
     * 向指定位置添加元素
     * @param e
     * @param index
     * @return
     */
    public boolean add(E e,int index) {
        if (index<0 || index>size){
            return false;
        }
        checkCapacity();
        for (int i = size -1; i>=index; i--){
            elem[i+1]=elem[i];
        }
        elem[index]=e;
        size++;
        return true;
    }

    /**
     * 向顺序表尾巴添加元素
     * @param e
     */
    public void add(E e){
        checkCapacity();
        elem[size++]=e;
    }

    /**
     * 移除指定位置的元素
     * @param index
     */
    public void remove(int index){
        checkIndexBounds(index);
        for (int i = index; i< size -1; i++){
            elem[i]=elem[i+1];
        }
        elem[--size]=null;
    }

    /**
     * 移除顺序表中最后一个元素
     */
    public void remove(){
        elem[--size]=null;
    }

    /**
     * 修改指定位置上的元素
     * @param e
     * @param index
     */
    public void set(E e,int index){
        checkIndexBounds(index);
        elem[index]=e;
    }

    public int size(){
        return size;
    }

    public boolean isEmpty(){
        return size ==0;
    }

    /**
     * 若顺序表大小超过数组容量,则根据下面的增长策略增加数组容量,并拷贝原来的数组
     */
    private void checkCapacity(){
        if (size>=capacity){
            capacity=capacity+(int) (capacity*0.5f);
            elem= Arrays.copyOf(elem,capacity);
        }
    }

    /**
     * 检查数组下标是否越界
     * @param index
     */
    private void checkIndexBounds(int index){
        if (index<0 || index >= size){
            throw new IndexOutOfBoundsException();
        }
    }
}

相关文章

  • Java 顺序表的简单实现

  • 顺序表简单实现

    考研数据结构得用c或c++写,写java的我终于还是被拉回来开始艰难而又咸鱼的c++学习,写的可能不是很好,凑合看...

  • java实现线性顺序表

    本文章同步到本人的博客站点 燕归来 线性表是存储顺序牌类的数据时最常用的数据结构。实现线性表有两种方式 1.使用数...

  • 数据结构-线性表

    [TOC] 线性表-List list是最简单的数据结构,可分为顺序表与链表,顺序表内部数据存储由数组实现,链表则...

  • 数据结构之Java List

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

  • 2018-06-28顺序表结构和实现以及具体操作

    顺序表的结构与实现 真正在实现顺序表的时候要怎么操作? 顺序表在构建的时候还会有个表头信息。 一个顺序表的完整信息...

  • 栈 Python实现

    栈的顺序表实现 栈的链接表实现

  • Java数组

    一. Java数组是用顺序表实现的 数组:在内存中,是一块连续的内存区域;

  • 2018-10-11

    0.实现顺序索引表的分块查找 实现顺序表的分级查找算法。基本要求包括: (1)设计顺序表和索引表的存储结构。 (2...

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

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

网友评论

      本文标题:Java 顺序表的简单实现

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