目录
扫描二维码关注公众号,回复:
13800104 查看本文章
一线性表
二.动态数组
三.添加元素
一.默认添加在数组末尾
动态数组类:
package seqlist;
import java.util.Arrays;
/**
动态数组的类:具备增删改查的功能,逻辑结构对外不可见。用户只知道该功能
*/
public class MyArray {
//封装的数组
private int[] data;
//表示动态数组中元素的个数;
private int size;
//如果没有传参,默认开辟大小为是10的数组
public MyArray(){
this(10);
}
public MyArray(int initCap){
this.data = new int[initCap];
}
public void add(int val){
data[size] = val;
size++;
//元素在添加过程中,元素已经填满数组
if (size == data.length){
grow();
}
}
/**
*
*/
private void grow(){
this.data = Arrays.copyOf(data,size*2);
}
@Override
public String toString() {
return "MyArray{" +
"data=" + Arrays.toString(data) +
'}';
}
}
测试类:
public class Test {
public static void main(String[] args) {
MyArray myArray = new MyArray(3);
myArray.add(10);
myArray.add(20);
myArray.add(30);
myArray.add(40);
System.out.println(myArray.toString());
}
}
测试结果:数组定义初始化的长度为3,当添加的元素大于数组长度时,数组长度扩容到自身的已倍
二.在指定位置index添加
public void add(int val,int index){
//先判断index是否非法,index可以等于size,就相当于在数组的尾部插入,index = 0在头部插入
if (index < 0 || index > size){
System.err.println("index is ");
}
for (int i = size -1;i >= index ;i--){
data[i+1] = data[i];
}
data[index] = val;
size++;
//元素在添加过程中,元素已经填满数组
if (size == data.length){
grow();
}
}
四.删除
一.删除首位元素
public int daleteFrist(){
return delete(0);
}
public int deleteLast(){
return delete(size - 1);
}
二.按下标删除
public int delete(int index){
if (index < 0 || index > size){
System.err.println("下标违法");
return -1;
}
int temp = data[index];
for (int i = index; i < size - 1; i++) {
data[i] = data[i+1];
}
size-- ;
return temp;
}
三.按值删除
public int deleteVal(int val){
int i = searchByVal(val);
if (i != -1){
int delete = delete(i);
return delete;
}
return -1;
}
public int[] deleteAllVal(int val){
MyArray myArray1 = new MyArray(1);
for (int i = 0; i < size; i++) {
if (data[i] == val){
myArray1.add(data[i]);
delete(i);
}
}
return myArray1.data;
}
五.修改
public int updateByIndex(int index,int val){
if (index < 0 || index > size){
System.err.println("下标违法");
return -1;
}
int oldVal = data[index];
data[index] = val;
return oldVal;
}
public boolean updateByVal(int oldVal,int val){
int i = searchByVal(oldVal);
if (i != -1){
data[i] = val;
return true;
}
return false;
}
六.查询
public int searchByIndex(int index){
if (index < 0 || index > data.length - 1){
System.err.println("下标违法");
return -1;
}
return data[index];
}
public int searchByVal(int val){
for (int i = 0; i < size-1; i++) {
if (data[i] == val){
return i;
}
}
return -1;
}
public boolean hasContainVal(int val){
int i = searchByVal(val);
if (i != -1){
return true;
}
return false;
}