Java基于数组的顺序表[增删改查]

Posted 王嘻嘻-

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java基于数组的顺序表[增删改查]相关的知识,希望对你有一定的参考价值。

  • 增加元素:头插addFirst(int val);尾插addLast(int val);中间插addIndex(int index,int val);        顺序表中实现增加元素的操作就是从插入元素下标开始,大于等于下标 对应的值依次向后移动一个单位,然后在指定下标位置增加指定元素。ps:尾插判断数组是否已满,若满,则扩容。
  • 删除元素:头删removeFirst();尾删removeLast();据下标删removeIndex(int index);删除索引中第一个元素为value的元素removeValueOnce(int value);删除索引中所有元素为value的元素removeValueAll(int value); 删除指定索引下标元素就是将大于此索引下标对应元素向前移,直接覆盖指定索引下标元素达到删除指定元素的效果。
  • 查找元素:查找当前数组是否存在boolean contains(int value);  根据索引查找对应元素位置int get(int index);  在数组中查找value值对应索引下标int getByValue(int value); 
  • 修改元素:根据索引修改元素int set(int index,int value);  将指定索引位置下标元素改为newValue;

package seqlist;

import java.util.Arrays;

/**
 * 基于数组的顺序表
 */
public class MyArry 
    private int[] data;  //在数组中存储元素
    private int size;    //动态数组中存储元素个数
    public MyArry()
        data=new int[10];
    
    /**
     * @param capacity 传入数组的大小
     */
    public MyArry(int capacity)
        data=new int[capacity];
    

    /**
     * 在数组头部插入元素
     * @param value 待插入元素的值
     */
    public void addFirst(int value)
        addIndex(0,value);
    

    /**
     * 在数组尾部插入元素
     * @param value 待插入元素的值
     */
    public void addLast(int value)
        addIndex(size,value);
    

    /**
     * 在数组的任意位置插入
     * @param index 数组下标
     * @param value 待插入元素的值
     */
    //判满  检验合法性   从后向前 移动元素  元素个数自加
    public void addIndex(int index,int value)
        if(size==data.length)
        grow();//若空间满,扩容
        
        if(index<0||index>size)
            System.err.println("add index illegal!");
            return;
        
        else
            for (int i = size-1; i >= index; i--) 
            data[i+1]=data[i];
        
            data[index]=value; //增加数据按对应的数组下标写入
            size++; //存储元素自加
        
    

    /**
     * 在数组中查找value值对应索引下标
     * @param value 待查找元素的值
     * @return
     */
    public int getByValue(int value)
        for (int i = 0; i < size; i++)  //遍历数组
            if(data[i]==value) 
                return i;
            
        
        //说明查找的值不在此数组中
        return -1;
    

    /**
     * 根据索引查询元素
     * @param index
     * @return
     */
    public int get(int index)
        if(index<0||index>=size)
            System.err.println("get index illegal!");
            return -1;
        
        return data[index];
    

    /**
     * 将指定索引位置元素修改为newValue
     * @param index 指定要修改的值对应的索引
     * @param newValue 要修改的值
     * @return 返回修改前的元素值
     */
    public int set(int index,int newValue)
        //判断合法
        if(index<0||index>=size)
            System.err.println("set index illegal!");
            return -1;
        
        int oldValue=data[index];
        data[index]=newValue;
        return oldValue;
    

    /**
     * 删除指定索引位置的元素  (后边的直接前移覆盖)
     * @param index
     */
    public void removeIndex(int index)
        if (index<0||index>=size)
            System.err.println("remove index illegal!");
            return;
        
        for (int i = index; i < size-1; i++) 
            data[i]=data[i+1];
        
        size--;
        data[size]=0;
    

    /**
     * 删除i对应的索引第一个值为value的节点
     * @param value 要删除的指定值
     */
    public void removeValueOnce(int value)
        for (int i = 0; i < size; i++) 
            if (data[i]==value)
                removeIndex(i);
                return;
            
        
    

    /**
     * 删除数组中所有指定元素值一样的元素
     * 注意要用while循环
     * @param value 要删除的指定元素
     */
    public void removeValueAll(int value)
        for (int i = 0; i < size; i++) 
            while (i != size && data[i] == value)
                removeIndex(i);
            
        
    

    /**
     * 删除第一个元素
     */
    public void removeFirst()
        removeIndex(0);
    

    /**
     * 删除最后一个元素
     */
    public void removeLast()
        removeIndex(size-1);
    

    public boolean contains(int value)
        int index = getByValue(value);
        if (index==-1)
            return false;
        
        return true;
    
    /**
     * 打印数组
     * @return
     */
    public String toString()
        String ret = "[";
        for (int i = 0; i < size; i++) 
            ret += data[i];
            if (i != size-1)
                ret += ",";
            
        
        ret += "]";
        return ret;
    

    /**
     * 扩容 乘2
     */
    private void grow() 
        int[] newData= Arrays.copyOf(this.data,this.data.length<<1);
                this.data=newData;
    

测试代码块 

package seqlist;

public class Test 
    public static void main(String[] args) 
        MyArry myArry = new MyArry(3);
        myArry.addLast(1);
        myArry.addLast(2);
        myArry.addLast(3);
        myArry.addLast(4);
        myArry.addLast(2);
        myArry.removeValueAll(2);
        System.out.println(myArry);
    


已完~~ thanks

以上是关于Java基于数组的顺序表[增删改查]的主要内容,如果未能解决你的问题,请参考以下文章

C语言顺序表的动态存储:增删改查的实现

JAVA增删改查

顺序表的插入和删除数组的增删改查和二分查找

C/C++数据结构-完整代码数据结构的理论,线性表(动态数组,链表)(完整的算法代码-增删改查-代码解析+运行结果解析)

C/C++数据结构-完整代码队列Queue(顺序存储,链式存储)增删改查

Java描述数据结构之链表的增删改查