您的位置:首页 > 编程语言 > Java开发

java数组的封装以及二分查找

2018-01-29 20:17 441 查看
数组类的分装:

package shuzu;

public class MyArray {
private long[] arr;
private int elements;
//创建一个长50的数组
public MyArray() {
arr = new long[50];
}
public int getElements() {
return elements;
}
//自定义数组长度
public MyArray(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() {
if(elements>0)
for(int i=0; i<elements; i++)
System.out.println(arr[i]);
}
/*查找数据*/
public int search(long value) {
for(int i=0; i<elements; i++) {
if(value == arr[i])
return i;
}
return -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;)
arr[i] = arr[i++];
}
elements--;
}
/*更新数据*/
public void change(int index, long newvalue) {
if(index >= elements || index < 0) {
throw new ArrayIndexOutOfBoundsException();
} else {
arr[index] = newvalue;
}
}
/**
* 二分法查找,数组需要是有续的
*/
public int binarySearch(long value) {
int middle = 0;
int left = 0;
int right = elements;

while(true) {
middle = (left+right) / 2;
if(arr[middle] == value) {
return middle;
} else if(left>right) {
return -1;
}else if( value > arr[middle]) {
left = middle+1;
} else {
right = middle-1;
}

}
}
}数组测试类:
package shuzu;
import java.lang.*;

public class TestArray1 {

public static void main(String[] args) {
// TODO Auto-generated method stub
MyArray arr = new MyArray();
arr.insert(30);
arr.insert(1);
arr.insert(0);
arr.insert(55);
System.out.println(arr.search(55));
System.out.println(arr.get(1));
for(int i=0; i<arr.getElements(); i++) {
System.out.println(arr.get(i));
}
System.out.println(arr.binarySearch(100));
}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息