数组相关操作的java实现
定义数组的三种方式
😱长度都不可变
int[] arr = {5,10,15};
int[] brr = new int[5];
int[] crr = new int[] {2,10,30};
数组扩容(动态数组)
ArrayList的实现:
public class ArrayList {
//全局变量
int size=0;//记录有效数据的个数
int capacity=10;//记录当前数组的容量
double factor=1.5;//因数1.5
int[] arr = new int[capacity];
//插入
public void add(int element) {
if(size==capacity) {
//数组满了扩容
capacity = (int)(capacity*factor);
int[] brr = new int[capacity];
for(int i=0;i<arr.length;i++) {
brr[i] = arr[i];
}
arr = brr;
}
//插入数据
arr[size] = element;
size++;
}
//打印
public String toString() {
String res = "[";
for(int i=0;i<size;i++) {
if(i==size-1) {
res+=arr[i];
}else {
res+=arr[i]+", ";
}
}
res+="]";
return res;
}
}
指定位置插入数据
//指定位置插入
public void insert(int value,int position) {
//判断位置是否合理
if(position<0||position>size) {
System.out.println("插入位置不合理");
return;
}
//数组满了扩容
if(size==capacity) {
capacity = (int)(capacity*factor);
int[] brr = new int[capacity];
for(int i=0;i<arr.length;i++) {
brr[i] = arr[i];
}
arr = brr;
}
//数组有空间进行插入
//插入位置及其之后的数据,从前往后的顺序统一向后移动一位
for(int i=size-1;i>=position;i--) {
arr[i+1] = arr[i];
}
//插入
arr[position] = value;
size++;
}
有序数组的插入
//有序数组的插入
public void insert1(int value) {
int i;
for (i = size-1;i>=0&&arr[i]>value;i--) {
// 将大于 value 的元素向后移动一位
arr[i + 1] = arr[i];
}
// 在找到的位置插入 value
arr[i + 1] = value;
// 更新数组的有效元素数量
size++;
}
删除元素
//删除第一个符合条件的数据
public boolean delFirst(int value) {
for(int j=0;j<size;j++) {
if(arr[j] == value) {
//删除
for(int i=j+1;i<size;i++) {
arr[i-1] = arr[i];
}
size--;
return true;
}
}
return false;
}
//删除所有符合条件的数据
public boolean delect(int value) {
for(int j=size-1;j>=0;j--) {
if(arr[j] == value) {
//删除
for(int i=j+1;i<size;i++) {
arr[i-1] = arr[i];
}
size--;
}
if(j==0) {
return true;
}
}
return false;
}