Java基础:数组

来源:互联网 发布:24小时学通qt编程 pdf 编辑:程序博客网 时间:2024/05/29 10:37

摘自http://blog.csdn.net/jiyiqinlovexx/article/details/46688171

一、数组初始化

无论如何,当你要实例化一个数组对象的时候,必须要指定其大小。

不能在提供了initializer的情况下再去指定数组的维度!!!

 

正确的初始化方式有:

  1. 方式1:Int[][] array =new int[][]{{1,2},{3,4},{5},{2,4,2,1}};   
  1. 方式2:Int[][] array ={{1,2},{3,4},{5},{2,4,2,1}};   
  1. 方式3:  
  2. Int[][] array =new int[3][5];  
  3. For(int I =0;i<array.length;i++){  
  4. For(int j=0;j<array[i].length;j++){  
  5. Array[i][i] = i*j;  
  6. }  
  7. }  

二、数组相对容器的优势

数组原来有三个优势:效率(付出的代价是大小固定),类型安全,以及保存基本类型的能力。

在泛型之前,容器在处理对象的时候,都将他们视为没有任何具体类型,然而数组指定持有某一具体类型,可以进行编译时检查,但是自从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。

 

0 0
原创粉丝点击