线性查找
public static void main(String[] args) {
String[] arr=new String[] {"AA","BB","CC","DD","DD"};
String desc="DD";
boolean isFind=false;
for(int i=0;i<arr.length;i++) {
if(desc==arr[i]) {
System.out.println(i+1);
isFind=true;
continue;
}
isFind=false;
}
if(isFind==false) {
System.out.println("没找到");
}
}
}
二分查找
```java
int[] arr=new int[] {1,2,3,4,5,6,7,8,9};
int desc=4;
int head=0;
int end=arr.length-1;
boolean isFind=false;
while(head<=end) {
int middle=(head+end)/2;
if(desc==arr[middle]) {
System.out.println("找到了,位置为:"+middle);
isFind=true;
break;
}else if(desc>arr[middle]) {
head=middle+1;
}else {
end=middle-1;
}
}
if(isFind==false) {System.out.println("没找到");}
}
}
当找到了想要查询的值的位置时,查看左右两边的值是否和他相等,相等则把位置记录下来
```java
//二分法查找 有重复数
public static void main(String[] args) {
int[] arr=new int[] {4,4,4,4,4,5,6,7,8};
int num1=0;
int num2=0;
int head=0;
int desc=4;
int end=arr.length-1;
while(head<=end) {
int middle=(head+end)/2;
if(desc==arr[middle]) {
for(int index1=(middle-1);index1>0;index1--) {
if(arr[index1]!=desc) {
num1=index1+1;
break;
}
}
for(int index2=(middle+1);index2<(arr.length);index2++) {
if(arr[index2]!=desc) {
num2=index2-1;
break;
}
}
//针对后面全为目标数的特殊情况
if(arr[arr.length-1]==desc) {
num2=arr.length-1;
}
//System.out.println(num1);
//System.out.println(num2);
System.out.println("找到,位置为:");
for(int i=num1;i<=num2;i++) {
System.out.println(i);
}
return;
}else if(desc>middle) {
head=middle+1;
}else {
end=middle-1;
}
}
}
}