第十六章:数组

2017-12-07  本文已影响0人  MAXPUP

数组的特殊性

数组与其他种类的容器的区别:效率、类型和保存基本类型的能力。其他容器在处理对象时,都是当做Object处理,而数组可以去持有某种具体类型,通过编译期检查可以防止错误类型使用。

数组是第一级对象

length是数组大小,而不是实际保存的元素个数。创建数组对象时,所有引用被自动初始化为null,数值为0,字符型为(char)O,布尔为false。
多维数组

数组与泛型

不能实例化具有参数化类型的数组:

Peel<Banana>[] peels = new Peel<Banana>[10];

但可以参数化数组本书的类型:

public T[] f(T[] arg){return arg;}

java允许创建泛型数组的引用, 然后创建非泛型的数组,将其转型:

List<String>[] ls;
List[] la = new List[10];
ls = (List<String>) la; // unchecked warning
ls[0] = new ArrayList<String>();
//Compile-time checking produces an error:
// ! ls[1] = new ArrayList<Integer>();

//如果你要直接生成一个泛型数组,抛出一个Unchecked warning
List<BerylliumSphere>[] spheres = (List<BerylliumSphere>[]) new List[10];

填充数组

  1. Arrays.fill(array, value):使用同一个值填充各个位置。
  2. 数据生成器Generator(next)

复制数组

System.arraycopy(源数组,开始复制位置,目标数组,目标复制开始位置,复制个数),比for循环快递。

比较数组

Arrays类提供了重载后的equals()方法,用来比较整个数组(元素个数相等,对应位置的元素也相等)。
java有两种方式提供比较功能,一是java.lang.Comparable接口(compareTo(obj)),当前对象小于返回负值,等于返回0,大于返回正值。
二是Comparator接口( equals()和compare(obj1, obj2)方法 )

数组排序

Arrays.sort( array, Comparable | Comparator)(基本数据类型数组无法使用Comparator进行排序)
在已排序的数组中查找使用Arrays.binarySearch(array, 比较器)执行快速查找,返回index。
找到目标,返回值大于等于0,否则,产生负返回值,表示若要保持数组的排序状态此目标元素所应该插入的位置,负值的计算方式:-(插入点)-1,插入点指第一个大于查找元素在数组中的位置。

上一篇下一篇

猜你喜欢

热点阅读