实现一个简单是List集合:
public class MyArray {
//List本身底层就是一个数组,只是在这暂时定义成long类型
private long[] arr;
//表示有效数据的长度
private int elements;
//对象创建时为数组创建50长度
public MyArray() {
arr = new long[50];
}
//也可以自定义初始化数组长度
public MyArray(int maxsize//传入需要多少长度的数组) {
arr = new long[maxsize];
}
/**
* 添加数据
*/
public void insert(long value) {
//添加赋值
arr[elements] = value;
//增加有效数据长度
elements++;
}
/**
* 显示数据 遍历有效数据输出显示
*/
public void display() {
System.out.print("[");
for(int i = 0; i < elements; i++) {
System.out.print(arr[i] + " ");
}
System.out.println("]");
}
/**
* 查找数据 根据值在数组中查找下标
*/
public int search(long value) {
int i;
for(i = 0; i < elements; i++) {
if(value == arr[i]) {
break;
}
}
if(i == elements) {
return -1;
} else {
return i;
}
}
/**
* 查找数据,根据索引来查 根据下标查找数据值
*/
public long get(int index) {
if(index >= elements || index < 0) {
//如果传入的索引下标值不对 抛出异常
throw new ArrayIndexOutOfBoundsException();
} else {
return arr[index];
}
}
/**
* 删除数据
*/
public void delete(int index) {
if(index >= elements || index < 0) {
//如果传入的索引下标值不对 抛出异常
throw new ArrayIndexOutOfBoundsException();
} else {
for(int i = index; i < elements; i++) {
//从需要删除的数据开始,由后往前依次覆盖
arr[index] = arr[index + 1];
}
elements--;
}
}
/**
* 更新数据
*/
public void change(int index, int newvalue) {
if(index >= elements || index < 0) {
//如果传入的索引下标值不对 抛出异常
throw new ArrayIndexOutOfBoundsException();
} else {
//更新数据
arr[index] = newvalue;
}
}
}
带排序:
public class MyOrderArray {
private long[] arr;
//表示有效数据的长度
private int elements;
public MyOrderArray() {
arr = new long[50];
}
public MyOrderArray(int maxsize) {
arr = new long[maxsize];
}
/**
* 添加数据
*/
public void insert(long value) {
int i;
for(i = 0; i < elements; i++) {
if(arr[i] > value) {
break;
}
}
for(int j = elements; j > i; j--) {
arr[j] = arr[j - 1];
}
arr[i] = value;
elements++;
}
/**
* 显示数据
*/
public void display() {
System.out.print("[");
for(int i = 0; i < elements; i++) {
System.out.print(arr[i] + " ");
}
System.out.println("]");
}
/**
* 查找数据
*/
public int search(long value) {
int i;
for(i = 0; i < elements; i++) {
if(value == arr[i]) {
break;
}
}
if(i == elements) {
return -1;
} else {
return i;
}
}
/**
* 二分法查找数据
*/
public int binarySearch(long value) {
int middle = 0;
int low = 0;
int pow = elements;
while(true) {
middle = (pow + low) / 2;
if(arr[middle] == value) {
return middle;
} else if(low > pow) {
return -1;
} else {
if(arr[middle] > value) {
pow = middle - 1;
} else {
low = middle + 1;
}
}
}
}
/**
* 查找数据,根据索引来查
*/
public long get(int index) {
if(index >= elements || index < 0) {
throw new ArrayIndexOutOfBoundsException();
} else {
return arr[index];
}
}
/**
* 删除数据
*/
public void delete(int index) {
if(index >= elements || index < 0) {
throw new ArrayIndexOutOfBoundsException();
} else {
for(int i = index; i < elements; i++) {
arr[index] = arr[index + 1];
}
elements--;
}
}
/**
* 更新数据
*/
public void change(int index, int newvalue) {
if(index >= elements || index < 0) {
throw new ArrayIndexOutOfBoundsException();
} else {
arr[index] = newvalue;
}
}
}
测试:
public class TestMyArray {
public static void main(String[] args) {
MyArray arr = new MyArray();
arr.insert(13);
arr.insert(34);
arr.insert(90);
arr.display();
System.out.println(arr.search(190));
System.out.println(arr.get(1));
arr.change(0, 12);
arr.display();
MyOrderArray arr = new MyOrderArray();
arr.insert(90);
arr.insert(30);
arr.insert(80);
arr.insert(10);
arr.display();
System.out.println(arr.binarySearch(30));
}
}
转载于:https://blog.51cto.com/8169085/1695805