-
String toString(数组)
- 说明:把数组拼接成一个字符串(底层为StringBuilder)
- 代码:
int[] nums = {0,1,2,3,4,5,6,7,8,9}; String s = Arrays.toString(nums); System.out.println(s);
结果:
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
-
int binarySearch(数组,查找的元素)
- 说明:二分查找元素
- 代码:
int[] nums = {0,1,2,3,4,5,6,7,8,9}; System.out.println(Arrays.binarySearch(nums,2)); System.out.println(Arrays.binarySearch(nums,10));
结果:
2 -11
注意:
二分查找前提是数组中元素必须是升序的;
如果要查找的元素存在,返回索引值;
如果要查找的元素不存在,返回-(插入点)-1
*插入点(insertion point):该元素应该存在的索引值,如 2 在[0,1,3]的插入点为 2
-
int[] copyOf(原数组,新数组长度)
- 说明:拷贝数组(底层为System.arrayCopy())
- 代码:
int[] nums = {0,1,2,3,4,5,6,7,8,9}; int[] newnums1 = Arrays.copyOf(nums, nums.length); int[] newnums2 = Arrays.copyOf(nums,5); int[] newnums3 = Arrays.copyOf(nums,12); System.out.println(Arrays.toString(newnums1)); System.out.println(Arrays.toString(newnums2)); System.out.println(Arrays.toString(newnums3));
结果:
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9] [0, 1, 2, 3, 4] [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 0]
注意:
if 新数组length<老数组length:部分copy
if 新数组length==老数组length:完全copy
if 新数组length>老数组length:补充默认初始值
-
int[] copyOfRange(原数组,起始索引,结束索引)
- 说明:拷贝数组(指定范围)
- 代码:
int[] nums = {0,1,2,3,4,5,6,7,8,9}; int[] newnums1 = Arrays.copyOfRange(nums,1,5); System.out.println(Arrays.toString(newnums1));
结果:
[1, 2, 3, 4]
注意:
包左不包右
-
void fill(数组,元素)
- 说明:填充数组(底层for循环)
- 代码:
int[] nums = {0,1,2,3,4,5,6,7,8,9}; Arrays.fill(nums,20); System.out.println(Arrays.toString(nums));
结果:
[20, 20, 20, 20, 20, 20, 20, 20, 20, 20]
-
void sort(数组)
- 说明:默认方式对数组排序(底层为快速排序)
- 代码:
int[] nums = {2,3,8,9,7,6,5,4,0,1}; Arrays.sort(nums); System.out.println(Arrays.toString(nums));
结果:
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
-
void sort(数组,排序规则)
- 说明:按指定方式对数组排序
- 代码:
Integer[] nums = {2,3,8,9,7,6,5,4,0,1}; Arrays.sort(nums, new Comparator<Integer>() { @Override public int compare(Integer o1, Integer o2) { return o1-o2; } });
结果:[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
- 底层原理:
利用插入排序+二分查找 排序;
默认把0索引当做有序序列,1索引到最后为无序序列;
遍历无序序列得到每个元素,假设当前遍历得到的元素为A元素,使用二分查找把A往有序序列中插入,拿A与插入点元素比较,比较的规则就是compare方法体;
参数o1:无序序列遍历得到的每个元素
参数o2:有序序列中的元素
if 方法的返回值<0 A为小,放前面,拿A与前面的数据比较;
if 方法的返回值>=0 A为大,放后面,拿A与后面的数据比较;
直到确定A的最终位置