1:自定义类封装数组,实现CRUD
package ch01;
/**
* 使用自定义类实现对 数组封装:实现CRUD
* 封装后的数组是无序的
* @author xxg
*
*/
public class MyArray {
// 定义一个对象数组
private Object[] arr;
//表示有效数据的长度
private int elements;
public MyArray() {
arr = new Object[50];
}
public MyArray(int maxsize) {
arr = new Object[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((Object)value == arr[i]) {
break;
}
}
if(i == elements) {
return -1;
} else {
return i;
}
}
/**
* 查找数据,根据索引来查
*/
public Object 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;
}
}
}
2:自定义类封装有序数组,使用二分查找算法查找:
package ch01;
/**
* 使用自定义类,封装有序数组
* @author xxg
*
*/
public class MyOrderArray {
private Object[] arr;
//表示有效数据的长度
private int elements;
public MyOrderArray() {
arr = new Object[50];
}
public MyOrderArray(int maxsize) {
arr = new Object[maxsize];
}
/**
* 在添加数据的时候,对数组进行排查
*/
public void insert(long value) {
int i;
for(i = 0; i < elements; i++) {
// 如果数组中元素大于插入的元素
if((Long)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 == (Long)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((Long)arr[middle] == value) {
return middle;
} else if(low > pow) {
return -1;
} else {
if((Long)arr[middle] > value) {
pow = middle - 1;// 往左边移动
} else {
low = middle + 1;// 往右边移动
}
}
}
}
/**
* 查找数据,根据索引来查
*/
public Object 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;
}
}
}
3:测试代码:
package ch01;
/**
* 对有序数组和无序数组测试
* @author Administrator
*
*/
public class TestMyArray {
public static void main(String[] args) {
// 测试无序数组
// MyArray arr = new MyArray();
// arr.insert(113);
// arr.insert(342);
// arr.insert(902);
// arr.insert(402);
// arr.insert(502);
//
// arr.display();
// System.out.println(arr.search(130));
//
// System.out.println(arr.get(1));
//
// arr.change(0, 12);
// arr.display();
// 测试有序数组
MyOrderArray arr = new MyOrderArray();
arr.insert(50);
arr.insert(40);
arr.insert(90);
arr.insert(30);
arr.insert(80);
arr.insert(10);
arr.insert(102);
arr.display();
System.out.println(arr.binarySearch(102));
}
}