动态数组的基本增删改查
实现代码
package com.struct;
/**
* 封装的数组
* 功能:增删改查
*/
public class MyArray {
private long[] array;
//表示有效的数据长度
private int elements;
public MyArray() {
array = new long[50];
}
public MyArray(int maxsize) {
array = new long[maxsize];
}
//添加数据
public void insert(long value) {
array[elements] = value;
elements++;
}
//显示数据
public void display() {
System.out.print("[");
for (int i = 0; i < elements; i++) {
System.out.print(array[i] + " ");
}
System.out.println("]");
}
//查找数据根据值
public int searchByValue(int value) {
int i;
for (i = 0; i < elements; i++) {
if (value == array[i]) {
break;
}
}
if (i == elements) {
return -1;
} else {
return i;
}
}
//查找数据根据索引
public long searchByIndex(int index) {
if (index >= elements || index < 0) {
throw new ArrayIndexOutOfBoundsException();
} else {
return array[index];
}
}
//删除数据 根据index 将后面的值覆盖前面的值,然后将数组的长度减少1
public void delete(int index) {
if (index >= elements || index < 0) {
throw new ArrayIndexOutOfBoundsException();
} else {
for (int i = index; i < elements; i++) {
array[i] = array[i + 1];
}
elements--;
}
}
//更新数据
public void update(int index, int newValue) {
if (index >= elements || index < 0) {
throw new ArrayIndexOutOfBoundsException();
} else {
array[index] = newValue;
}
}
}
测试代码
package com.struct;
public class TestMyArray {
public static void main(String[] args) {
MyArray array = new MyArray();
array.insert(10);
array.insert(11);
array.insert(12);
array.insert(13);
array.display();
System.out.println(array.searchByIndex(3));
System.out.println(array.searchByValue(13));
array.update(0,88);
array.display();
array.delete(0);
array.display();
}
}
测试结果
[10 11 12 13 ]
13
3
[88 11 12 13 ]
[11 12 13 ]
有序数组
修改添加数据
思路:将数组里面的值一个个往后移动,从最后一个开始移动
将插入的值覆盖插入的位置即可
//添加数据
public void insert(long value){
int i;
for (i = 0; i <elements ; i++) {
if (value< array[i]){
break;
}
}
for (int j=elements;j > i;j--){
array[j]= array[j-1];
}
array[i] = value;
elements++;
}
线性查找
二分法查找
前提:数组时有序的
不断的从中间开始,故先while死循环,将pow值和low值累加相除2,然后赋值给middle
/*
二分查找算法
*/
public int binarySearch(long value) {
int middle = 0;
int low = 0;
int pow = elements;
while (true){
int middle = (pow + low) / 2;
if (array[middle] == value){
return middle
}else if (pow < low){
return -1;
}else {
//小了就改大,大了就改小
if (value < array[middle]){
pow = middle -1;
}else {
low = middle +1;
}
}
}
}