# 一、binarySearch
使用二分搜索法来搜索指定的数组,以获得指定对象。该方法返回要搜索元素的索引值。务必注意:数组必须经过排序才可以使用此方法,否则返回下标显示不准。binarySearch()
方法提供多种重载形式,用于满足各种类型数组的查找需要。
【1】binarySearch(Object[] a, Object key)
:【a】要搜索的数组;【key】要搜索的值;如果key
在数组中,则返回搜索值的索引;否则返回-1
或-
(插入点)。插入点是索引键将要插入数组的那一点,即第一个大于该键的元素的索引。
技巧:
[1] 搜索值不是数组元素,且在数组范围内,从1开始计数,得“ - 插入点索引值”;
[2] 搜索值是数组元素,从0开始计数,得搜索值的索引值;
[3] 搜索值不是数组元素,且小于数组内元素,索引值为–1
;
[4] 搜索值不是数组元素,且大于数组内元素,索引值为– (length + 1)
;【我们用的最多的特性】
import java.util.Arrays;
public class ArraysBinarySearch {
public static void main(String[] args) {
int arr[] = new int[]{3, 5, 7, 9, 11, 13};
Arrays.sort(arr);
for (int i = 0; i < 17; i++) {
System.out.println("数字【" + i + "】:" + Arrays.binarySearch(arr, i));
}
}
}
2
3
4
5
6
7
8
9
10
11
12
13
结果:
数字【0】:-1
数字【1】:-1
数字【2】:-1
数字【3】:0
数字【4】:-2
数字【5】:1
数字【6】:-3
数字【7】:2
数字【8】:-4
数字【9】:3
数字【10】:-5
数字【11】:4
数字【12】:-6
数字【13】:5
数字【14】:-7
数字【15】:-7
数字【16】:-7
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
【2】binarySearch(Object[] a, int fromIndex, int toIndex, Object key)
:【a】要搜索的数组;【fromIndex】指定范围的开始处索引(包含)【toIndex】指定范围的结束处索引(不包含)【key】:要搜索的值。
技巧:
[1] 该搜索键在范围内,但不是数组元素,由1开始计数,得“ - 插入点索引值”;
[2] 该搜索键在范围内,且是数组元素,由0开始计数,得搜索值的索引值;
[3] 该搜索键不在范围内,且小于范围(数组)内元素,返回–(fromIndex + 1)
;
[4] 该搜索键不在范围内,且大于范围(数组)内元素,返回–(toIndex + 1)
。
import java.util.Arrays;
public class ArraysBinarySearch2 {
public static void main(String[] args) {
int arr[] = new int[]{3, 5, 7, 9, 11, 13};
Arrays.sort(arr);
for (int i = 0; i < 17; i++) {
System.out.println("数字【" + i + "】:" + Arrays.binarySearch(arr, 1, 4, i));
}
}
}
2
3
4
5
6
7
8
9
10
11
12
13
结果:
数字【0】:-2
数字【1】:-2
数字【2】:-2
数字【3】:-2
数字【4】:-2
数字【5】:1
数字【6】:-3
数字【7】:2
数字【8】:-4
数字【9】:3
数字【10】:-5
数字【11】:-5
数字【12】:-5
数字【13】:-5
数字【14】:-5
数字【15】:-5
数字【16】:-5
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# 二、sort
Arrays.sort ( 数组名 ) && Arrays.sort(数组,排序规则)
按照默认升序(从小到大)对数组的元素进行排序。
1、如果是数值,sort
默认按照升序从小到大,底层使用的是快速排序
2、如果是字符串,sort
默认按照字母升序
3、如果是自定义的类型,那么这个自定义的类需要有Comparable
或者Comparator
接口的支持
# 三、equals
判断两个数组是否相等
Arrays.equals ( 数组名1,数组名2 )
// 拷贝数组(指定范围)
Array.copy Of Range(原数据,起始索引,结束索引)
2
3
4
# 四、copyOf
Arrays.copyOf(原数组 , 新数组长度)
拷贝数组:方法的底层会根据第二个参数来创建新的数组:
【1】如果新数组的长度是小于老数组的长度,会部分拷贝;
【2】如果新数组的长度是等于老数组的长度,会完全拷贝;
【3】如果新数组的长度是大于老数组的长度,会补上默认初始值;
# 五、fill
Arrays.fill ( 数组名, 要填充的 值 或 元素 )
将指定值填充到数组之中:包头不包尾,包左不包右(左闭右开)