16 数组
16.7 Arrays实用功能
- equals() 用于比较两个数组是否相等
- fill() 用同一个值填充数组各个位置
- sort() 用于对数组排序
- binarySearch() 在已经排序的数组中查找元素
- toString()
- hashCode()
此外,Arrays.asList() 接收任意的序列或者数组作为参数,并将其转变为List容器。
16.7.1 复制数组
java标准库提供static方法System.arraycopy()
arraycopy()需要的参数有,源数组,表示从源数组什么位置开始复制的偏移量,目标数组,表示从目标数组什么位置开始复制的偏移量,需要复制的元素个数。当然,对数组的任何越界操作都会导致异常。
然而,如果复制对象数组,那么只是复制了对象的引用,而不是对象本身的拷贝,这被称作浅复制。
System.arraycopy()不会自动包装和拆包,两个数组必须具有相同的确切类型。
16.7.2 数组的比较
数组相等的条件是元素个数必须相等,并且对应位置的元素使用equals()判断相等。
16.7.3 数组元素的比较
- 实现java.lang.Comparable接口,只有一个compareTo()方法。
- 可以创建一个实现了Comparator接口的类,实现compare()方法。并将此类的实例传入Array.sort()方法。
16.7.5 在已经排序的数组中查找
若找到了目标,Arrays.binarySearch()的返回值大于等于0,否则返回负值,表示若要保持数组的排序状态此目标元素应该插入的位置。这个负值的计算方式为:
-(插入点)-1
插入点指第一个大于查找元素在数组中的位置。
如果使用了Comparator排序了某个对象数组,使用binarySearch()时必须提供同样的Comparator。