Arrays.binarySearch和Collections.binarySearch的详细⽤法概述
binarysearch为在指定数组中查指定值得索引值,该值在范围内得到则返回该值的索引值,不到则返回该值的插⼊位置,如果该值⼤于指定范围最⼤值则返回-(maxlength+1),⽽:
int w=Arrays.binarySearch(a,1,5,8);查的范围为索引值1-5,:2,3,4,5,6
8并不在此范围中,且8⼤于最⼤索引值的6,所以返回-(5+1):-6
解析
查看java源码,可以看到,binarySearch()⽅法是重载⽅法,提供了两种形参⽅式:
⼩贴⼠:binarySearch()⽅式内部实现⽤的是⼆分法查,所以在查前需要将数组进⾏排序,且数组中不能出现相同元素,否则查出来的索引会不清楚是哪⼀个的:
1)默认范围(数组长度)查指定值索引:
格式:
binarySearch(object[ ], object key);
如果key在数组中,则返回搜索值的索引;否则返回-1(key⼩于数组中的任意⼀个元素)或者”-“(插⼊点)。插⼊点是索引键将要插⼊数组的那⼀点,即第⼀个⼤于该键的元素索引。
key的值在数组范围内则索引从0开始计数;
key值不存在数组范围内(⼤于数组最⼩元素)则从1开始计数;
实例:
import java.util.Arrays;
public class test {
public static void main(String[] args) {
int[] b = new int[] { 4, 25, 10, 95, 06, 21 };
System.out.println("原数组为:");
for (int dim1 : b) {
System.out.print("" + dim1 + " ");
}
Arrays.sort(b);
System.out.println("排序后为:");
for (int x : b) {
System.out.print(x + " ");
}
System.out.println();
int index = Arrays.binarySearch(b, 2);
System.out.println("关键字2的返回值为:" + index);
index = Arrays.binarySearch(b, 20);
System.out.println("关键字20的返回值为:" + index);
index = Arrays.binarySearch(b, 30);
System.out.println("关键字30的返回值为:" + index);
index = Arrays.binarySearch(b, 100);
System.out.println("关键字100的返回值为:" + index);
index = Arrays.binarySearch(b, 10);
System.out.println("关键字10的返回值为:" + index);
}
}
2)指定范围查指定元素的索引:
格式:
binarySearch(object[ ], int fromIndex, int endIndex, object key);
注意点:
1、该搜索键在范围内,但不在数组中,由1开始计数;
2、该搜索键在范围内,且在数组中,由0开始计数;sort out同义短语
3、该搜索键不在范围内,且⼩于范围内元素,由1开始计数;
4、该搜索键不在范围内,且⼤于范围内元素,返回-(endIndex + 1);(特列)
实例:
import java.util.Arrays;
public class test {
public static void main(String[] args) {
int[] b = new int[] { 4, 25, 10, 95, 06, 21 };
System.out.println("原数组为:");
for (int dim1 : b) {
System.out.print("" + dim1 + " ");
}
Arrays.sort(b);
System.out.println("排序后为:");
for (int x : b) {
System.out.print(x + " ");
}
System.out.println();
int index = Arrays.binarySearch(b, 1, 3, 2);
System.out.println("关键字2的返回值为:" + index);
index = Arrays.binarySearch(b, 1, 3, 20);
System.out.println("关键字20的返回值为:" + index);
index = Arrays.binarySearch(b, 1, 4, 30);
System.out.println("关键字30的返回值为:" + index);
index = Arrays.binarySearch(b, 1, 4, 100);
System.out.println("关键字100的返回值为:" + index);
index = Arrays.binarySearch(b, 1, 4, 10);
System.out.println("关键字10的返回值为:" + index);
}
}
拓展内容
array数组详解
数组对于每⼀门编程语⾔来说都是重要的数据结构之⼀,当然不同语⾔对数组的实现及处理也不尽相同。
Java 语⾔中提供的数组是⽤来存储固定⼤⼩的同类型元素。
你可以声明⼀个数组变量,如 numbers[100] 来代替直接声明 100 个独⽴变量 number0,number1,…,number99。
本教程将为⼤家介绍 Java 数组的声明、创建和初始化,并给出其对应的代码。
Arrays 类
java.util.Arrays 类能⽅便地操作数组,它提供的所有⽅法都是静态的。
具有以下功能:
给数组赋值:通过 fill ⽅法。
对数组排序:通过 sort ⽅法,按升序。
⽐较数组:通过 equals ⽅法⽐较数组中元素值是否相等。
查数组元素:通过 binarySearch ⽅法能对排序好的数组进⾏⼆分查法操作。
1 public static int binarySearch(Object[] a, Object key)
⽤⼆分查算法在给定数组中搜索给定值的对象(Byte,Int,double等)。数组在调⽤前必须排序好的。如果查值包含在数组中,则返回搜索键的索引;否则返回 (-(插⼊点) - 1)。
2 public static boolean equals(long[] a, long[] a2)
如果两个指定的 long 型数组彼此相等,则返回 true。如果两个数组包含相同数量的元素,并且两个数组中的所有相应元素对都是相等的,则认为这两个数组是相等的。换句话说,如果两个数组以相同顺序包含相同的元素,则两个数组是相等的。同样的⽅法适⽤于所有的其他基本数据类型(Byte,short,Int等)。
3 public static void fill(int[] a, int val)
将指定的 int 值分配给指定 int 型数组指定范围中的每个元素。同样的⽅法适⽤于所有的其他基本数据类型(Byte,short,Int等)。
4 public static void sort(Object[] a)
对指定对象数组根据其元素的⾃然顺序进⾏升序排列。同样的⽅法适⽤于所有的其他基本数据类型(Byte,short,Int等)。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。