1 :以面向对象的思想来构建数组
2 :构建有序数组
3 :查找算法:1)线性查找。 2)二分法查找
package com.jianshun;
/**
* 以面向对象的思想对数组进行操作
* @author Administrator
*
*/
public class MyArray {
private long[] arr;
private int elements;//数据的有效长度
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[i] = arr[i+1];
}
elements--;
}
}
//跟新数据
public void update(int index, int value){
if(index >= elements || index < 0){
throw new ArrayIndexOutOfBoundsException();
}else{
arr[index] = value;
}
}
/**
* 构建有序数组(添加数据)
*/
public void add(int value){
int i;
for(i=0; i<elements; i++){
if(arr[i] > value){//当前的i下标应该新的数据应该放置的位置
break;
}
}
for(int j=elements; j>i; j--){
arr[j] = arr[j-1];
}
arr[i]=value;
elements++;
}
/**
* 查找算法:
* 1:线性查找(上面均为线性查找,从头开始查找,找到为止)
*
* 2:二分法查找(前提是该数组必须是有序数组)(该方法演示二分法)
*/
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( value < arr[middle]){
pow = middle - 1;
} else {
low = middle + 1;
}
}
}
}
}