标签:
一、数组初始化
无论如何,当你要实例化一个数组对象的时候,必须要指定其大小。
不能在提供了initializer的情况下再去指定数组的维度!!!
正确的初始化方式有:
方式1:Int[][] array =new int[][]{{1,2},{3,4},{5},{2,4,2,1}};
方式2:Int[][] array ={{1,2},{3,4},{5},{2,4,2,1}};
方式3: Int[][] array =new int[3][5]; For(int I =0;i<array.length;i++){ For(int j=0;j<array[i].length;j++){ Array[i][i] = i*j; } }
数组原来有三个优势:效率(付出的代价是大小固定),类型安全,以及保存基本类型的能力。
在泛型之前,容器在处理对象的时候,都将他们视为没有任何具体类型,然而数组指定持有某一具体类型,可以进行编译时检查,但是自从1.5引入泛型时候,这个优势消失了。自从引入包装机制之后,容器也可以方便地应用与基本类型了。
所以,数组硕果仅存的优势就是“效率”了。
选择的原则是:当你使用最近的Java版本进行编程时,应该优先选择容器而不是数组,只有在证明性能已成为问题(切换到数组有助于提高性能)时,你才应该将程序重构为数组。
三、数组在Java中是一个类
无论使用哪种类型的数组,数组标识只是一个引用,指向堆中一个真实的对象。
(1)如果是对象数组,那么数组引用中保存的是一系列对象的引用。
(2)如果是基本类型数组,那么数组引用中保存的是一系列基本类型的值。
数组对象只有一个只读成员length,‘[]‘语法是访问数组对象的唯一方式。
四、java中如果你要返回一组值,那么就使用数组
C/C++就不行,只能返回指针,虽然这时控制数组的生命周期就会变得困难,但是Java无需要为数组负责,只要你需要他,它就会一直存在,当你使用完后,垃圾回收器会清理掉它。
publicString[] getFruits(){ ……… }
五、粗糙数组
Java支持粗糙数组,即构成矩阵的每个向量具备任意长度
Inta[][] = {{1,2}, {2, 4, 5}, {6, 4, 8, 9}};
六、数组+泛型
你无法实例化具有参数化类型的数组,因为数组必须知道它所持有的确切类型。但是你可以参数化数组本身的类型。
Type<Orange>[] pp = new Type<Orange>[10]; |
//compile error |
Public static <T> T[] f(T[] args){ …… } |
//OK |
七、Arrays类
Array.sfill(a, 11); Arrays.fill(b, 2, 7, "Hello"); |
用单一的值填充一个数组,如果是对象,则复制引用。 |
|
Arrays.equals(); |
比较两个数组是否相等。deepEquals()用于多维数组。此方法对于所有基本类型和Object都做了重载,用于比较两个数组。相等的条件是元素个数相等,并且对应位置的元素也相等。 |
|
class Type implements Comparable<> Type[] a = new Type[10]; Arrays.sort(a); Class MyComparator implements Comparator{}Arrays.sort(a, new MyComparator()); |
对数组排序。可以对任意基本类型数组排序,也可以对对象数组排序,只要改对象实现了Comparable接口(包含compareTo方法)或者具有关联的Comparator。 |
|
Arrays.binarySearch(); |
在已排序的数组中查找元素。 |
|
Arrays.hashCode(); |
产生数组的散列码。 |
|
Arrays.asList(); |
接收任意序列或者数组作为参数,转换成List。 |
|
版权声明:本文为博主原创文章,未经博主允许不得转载。
标签:
原文地址:http://blog.csdn.net/jiyiqinlovexx/article/details/46688171