思维导图
数组存在的唯一作用就是效率,他的随机访问速度比ArrayList都要快很多,但是,由此而来的缺点就是其大小是不可变的.
数组虽然不在面向对象的概念里,但是也属于Java对象,存在引用和实例.
//数组常见的创建方法
//如果没有赋值的话,那么数据会进行默认的初始化.比如int是0,boolean是false,对象则是null
int[] test = new int[5];
int[] test2 = {1,2,3,4};
//数组内有一个名为length的变量,是数组长度的值,而不是装入数据的计数.
int length = test.length;
//当然,存在多维数组,以二维数组举例,多维数组可以只对第一维设置长度限制
int[][] test3 = new int[5][];
//也可以直接赋值,维度之间以大括号为界,三维四维都是如此
int[][] test4 = {{1,2,3},{4,5,6}};
数组一般是不可以和泛型配合使用的,因为Java的泛型机制会在某个阶段擦除泛型,即所有泛型都会被编译器认为是Object,而数组却在创建的那一刻就确定了装载何种数据类型,所以,这两者是有冲突的.
我们可以创建泛型数组的引用,却不能创建泛型对象的实例.为了创建泛型数组,取巧的方法就是先创建普通数组,再强制转化为泛型,不过这种情况下会有编译警告.
//不能创建泛型实例,会编译失败
//ArrayList<Integer>[] test = new ArrayList<Integer>[10];//创建失败
//泛型引用
T[] t ;
//先创建一般的数组,再转型为泛型数组
ArrayList<Integer> t2 ;
ArrayList t3 = new ArrayList();
t2 = (ArrayList<Integer>)t3;
最后,为了在日常使用中能更好的的操作Array,开发人员提供了Arrays类,其中有许多很有用的方法.
|
binarySearch(byte[] a, byte key) 使用二分搜索法来搜索指定的 byte 型数组,以获得指定的值。//当然,重载了其他数据类型,这里只是举例 |
copyOf(byte[] original, int newLength) 复制指定的数组,截取或用 0 填充(如有必要),以使副本具有指定的长度。此方法当然也重载了 |
copyOfRange(boolean[] original, int from, int to) 将指定数组的指定范围复制到一个新数组。此方法当然也重载了 |
fill(boolean[] a, boolean val) 将指定的 boolean 值分配给指定 boolean 型数组的每个元素。有重载,只填充单一数据 |
sort(char[] a) 对指定的 char 型数组按数字升序进行排序。有重载 |