1、將陣列轉換成物件導向的陣列
2、使用線性查詢
3、使用二分法查詢
一、陣列:
public class MyArray {
//用於儲存資料的陣列
private int[] elements;
//例項物件時,建立陣列
public MyArray(){
elements=new int[0];
}
//獲取陣列長度的方法
public int size(){
return elements.length;
}
//往陣列的末尾新增一個元素
public void add(int element){
//建立一個新陣列
int[] newArr=new int[elements.length+1];
//把原陣列的元素賦值到新陣列到
for (int i = 0; i < elements.length; i++) {
newArr[i]=elements[i];
}
//把新增的元素放入新陣列中
newArr[elements.length]=element;
//使用新陣列替換舊陣列
elements=newArr;
}
//列印所有元素到控制檯
public void show(){
System.out.println(Arrays.toString(elements));
}
//刪除陣列中的元素
public void delete(int index){
if(index<0||index>elements.length-1){
throw new RuntimeException("下標越界!!");
}
//建立新陣列
int[] newarr=new int[elements.length-1];
for(int i=0;i<newarr.length;i++){
if(i<index){
newarr[i]=elements[i];
}else{
newarr[i]=elements[i+1];
}
}
elements=newarr;
}
//獲取某個元素
public int get(int index){
return elements[index];
}
//指定位置插入元素
public void insert(int index,int elemten){
if(index<0||index>elements.length-1){
throw new RuntimeException("插入下標越界");
}
int[] newarr=new int[elements.length+1];
for(int i=0;i<elements.length;i++){
if(i<index){
newarr[i]=elements[i];
}else{
newarr[i+1]=elements[i];
}
}
newarr[index]=elemten;
elements=newarr;
}
//替換指定位置的元素
public void set(int index,int element){
if(index<0||index>elements.length-1){
throw new RuntimeException();
}
elements[index]=element;
}
//線性查詢
public int search(int target){
//遍歷陣列
for(int i=0;i<elements.length;i++){
if(elements[i]==target){
return i;
}
}
return -1;
}
//二分查詢
public int binarySearch(int target){
//記錄開始位置
int begin=0;
//記錄結束位置
int end=elements.length-1;
//記錄中間的位置
int mid=(begin+end)/2;
//迴圈查詢
while(true){
//什麼情況下沒有這個元素?
//開始位置在位數之後或或重合,沒有這個元素
if(begin>=end){
return -1;
}
//判斷中間這個元素是不是要查詢的元素
if(elements[mid]==target){
return mid;
//中間這個元素不是要查的元素
}else{
//判斷中間這個元素是不是比目標元素更大
if(elements[mid]>target){
//結束位置調到中間位置
end=mid-1;
}else{
//把開始的位置調到中間位置
begin=mid+1;
}
//取出新的中間位置
mid=(begin+end)/2;
}
}
}
}