数组
数组为什么特殊
- 数组是一种效率最高的存储和随机访问对象引用序列的方式
- 数组可以持有基本类型,而容器不能。有了自动包装机制,容器看起来还能持有基本类型,所以数组仅存的优点就是效率
数组是第一级对象
- 数组标识符其实只是一个引用,只想在堆内存中创建的一个真实对象,这个数组对象用以保存指向其他对象的引用。
- length是数组对象唯一一个可以访问的字段,"[]"语法是访问数组的唯一方式
- 生成一个数组时,所有引用自动初始化为null,基本类型的数组则将地址清零(数值0,字符0,布尔false)
- 基本类型的数组直接存储基本类型数据的值
返回一个数组
- 返回一个数组与返回任何其他对象(实质上是引用)没有区别
多维数组
- Arrays.deepToString()可以将多维数组转化为多个String
数组与泛型
- 数组与泛型通常不能很好的结合。不能实例化具有参数化类型的数组,但是可以创建这种引用。擦除会移除参数类型信息,而数组必须知道他们所持有的确切类型,以强制保证类型安全。
- 可以参数化数组本身的类型(T[])
- 可以创建非泛型的数组,然后将其转型
创建测试数据
(RTTI)
Arrays实用功能
- Arrays.fill()用同一个值填充数组;
- System.arraycopy()针对所有类型做了重载,他需要五个参数:源数组,源数组起始位置,目标数组,目标数组开始位置,复制长度。对象数组仅仅复制了引用。
- System.arraycopy()不会执行自动包装和自动拆包。
- Arrays提供重载的equals方法,仅当元素个数相等,对应位置也相等时相等
- 元素比较方式有两种
- 实现java.lang.Comparable()接口,只有一个compareTo()方法,如果当前对象小于参数则返回负值,如果相等则返回零,大于参数返回正值
- Comparator接口,compare()和equals()两个方法
- sort()用于排序
- 如果数组已经排序好了,可以使用Arrays.binarySearch()执行快速查找。如果未排序就使用会产生不可预料的结果
- Arrays.binarySearch()的返回值大于等于0则表示找到了,否则返回负值,表示若要保持数组的排序状态此目标元素应该插入的位置(从1开始计算)。如果数组有重复,不能保证找到的是副本中的哪一个