《thinking in java》学习笔记16

来源:互联网 发布:fm球员数据库 编辑:程序博客网 时间:2024/04/29 15:56
数组

数组为什么特殊
  • 数组是一种效率最高的存储和随机访问对象引用序列的方式
  • 数组可以持有基本类型,而容器不能。有了自动包装机制,容器看起来还能持有基本类型,所以数组仅存的优点就是效率

数组是第一级对象
  • 数组标识符其实只是一个引用,只想在堆内存中创建的一个真实对象,这个数组对象用以保存指向其他对象的引用。
  • length是数组对象唯一一个可以访问的字段,"[]"语法是访问数组的唯一方式
  • 生成一个数组时,所有引用自动初始化为null,基本类型的数组则将地址清零(数值0,字符0,布尔false)
  • 基本类型的数组直接存储基本类型数据的值

返回一个数组
  • 返回一个数组与返回任何其他对象(实质上是引用)没有区别

多维数组
  • Arrays.deepToString()可以将多维数组转化为多个String

数组与泛型
  • 数组与泛型通常不能很好的结合。不能实例化具有参数化类型的数组,但是可以创建这种引用。擦除会移除参数类型信息,而数组必须知道他们所持有的确切类型,以强制保证类型安全。
  • 可以参数化数组本身的类型(T[])
  • 可以创建非泛型的数组,然后将其转型

创建测试数据
(RTTI)

Arrays实用功能
  • Arrays.fill()用同一个值填充数组;
  • System.arraycopy()针对所有类型做了重载,他需要五个参数:源数组,源数组起始位置,目标数组,目标数组开始位置,复制长度。对象数组仅仅复制了引用。
  • System.arraycopy()不会执行自动包装和自动拆包。
  • Arrays提供重载的equals方法,仅当元素个数相等,对应位置也相等时相等
  • 元素比较方式有两种
  1. 实现java.lang.Comparable()接口,只有一个compareTo()方法,如果当前对象小于参数则返回负值,如果相等则返回零,大于参数返回正值
  2. Comparator接口,compare()和equals()两个方法
  • sort()用于排序
  • 如果数组已经排序好了,可以使用Arrays.binarySearch()执行快速查找。如果未排序就使用会产生不可预料的结果
  • Arrays.binarySearch()的返回值大于等于0则表示找到了,否则返回负值,表示若要保持数组的排序状态此目标元素应该插入的位置(从1开始计算)。如果数组有重复,不能保证找到的是副本中的哪一个

0 0
原创粉丝点击