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;
}
}
}
}