JAVA Collections--Array

来源:互联网 发布:php面试真题 编辑:程序博客网 时间:2024/04/29 08:28

Array

数组的初始化
多维数组的最外围是一个指针,指向的是该维度的数组。
例如二维数组a[1]指向的是数组a[1][0],a[1][1],a[1][2].
正因为是一个地址,所以多维数组并不要求长度一致。
例如:

int a[][]=new int[4][];for(int i=0;i<4;i++){a[i]=new int[i+1];}

数组的复制
arraycoppy()有五个参数,分别是源数组,目的数组,源数组起始位置,目的数组起始位置,复制的长度。
这里需要注意的是在进行复制之前,目的数组已经被初始化。
与arraycopy()不同的是clone()方法,clone将原来的数组复制一份,产生一个新的数组,数组的产生于初始化同时进行。

如果进行copy的是基本类型,那么对一个数组进行修改不会影响到另一个数组;如果数组中是引用类型,任何一个数组的改变都会改变另一个数组。


数组的不变性
如果不希望数组的结构被改变,就可以将数组声明为final,例如:
final static int array[]={1,2,3,4,5},
如果再将array指向一个新的数组就会发生错误,但是并不代表不能修改数组本身的值。
如array=new int[]{1,2,3,4}会发生编译错误。
但是array[3]=9就是合法的。


数组的赋值
如果数组中的元素是子类,可以将数组的引用给父类数组,但是如果给父类数组新增其他的子类元素时,会产生运行时错误。


数组相等的判断
如果是比较两个变量是不是指向同一个数组,这时候使用==就可以判断,如果是比较两个数组的元素是否相同,使用equals()方法进行判断,会返回一个boolean型的值。
与String的判断类似。


数组反射
判断一个变量指向的类型是不是数组,首先查询变量的类型,使用Class type=object.getClass(),然后使用type.isArray()判断是否是array。然后使用Class compType=type.getComponentClass()查询数组中成员的类型。
如果一个子类型的变量和一个父类型的变量同时指向一个数组,那么使用getCompomentType返回的都是子类型。
数组的初始化还有一种方式,

int arraytest[]=(int[])Array.newInstance(int.class5)

另一种方式是,声明一个一位数组,

int dimention[]={5};int[] array=Array.newInstance(int.class,dimention);

如果要像之前声明一个金字塔形的数组时,
使用如下方式

int  pirimid[][]=(int[][])Array.newInstance(int.class,4);for(int i=0;i<4;i++){pirimid[i]=(int[])Array.newInstance(int.class,i+1);}

对array进行操作可以使用getInt(Object object,int index)方法,不论是get还是set方法,返回来的都是包装类型,例如int会变成Integer类型。

将数组的容量变成原来的两倍,并且将原数组的值copy到新的数组非方法:
(注意在这里首先判断下传进去的值是不是array类型)

static Object doubleArray(Object original) {Object returnValue = null;Class type = original.getClass();if (type.isArray()) {int length = Array.getLength(original);Class elementType = type.getComponentType();returnValue = Array.newInstance(elementType, length*2);System.arraycopy(original, 0, returnValue, 0, length);}return returnValue;}

字符数组
字符数组和String的相互转换:
String方法toCharArray()
和string的构造器,可以以一个字符数组作为入参。

总结:

  1. 数组使用时传递的是引用
  2. 数组相等的检查与判断
  3. 字符数组与字符串的相互转化
  4. 反射在数组初始化以及数组中的使用

其他章节的总结也会后续更新。
详细内容参考 Java Collections Apress出版社。

Thomas
2016.07.25
@Hangzhou

0 0
原创粉丝点击