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