java中的数组

数据

在java中,数组是一种效率最高的存储和随机访问的对象引用序列的方式。数组是简单的线性序列,因而元素的访问非常快速,但为此而付出的代价是数组的大小是固定的,并且在生命周期中不可变。

数组可以持有基本类型,而泛型之前的容器则不能。但是有了泛型,容器可以指定并检查他们所持有对象的类型,并且有了自动装包机制,容器看起来还能够持有基本类型。有了java1.5中的泛型后,数组仅存的优点只剩效率。

无论使用哪种类型的数组,数组标识符其实是一个引用,指向在堆中创建的一个真实的对象,这个对象(数组)用以保存指向其他对象的引用,此对象可以隐式的创建,也可以显示的用new关键字创建。 只读成员length是数组对象的一部分(数组对象唯一一个可以访问的字段或方法)。

对象数组与基本类型数据的区别:

  • 对象数组保存的是引用
  • 基本类型数组直接保存基本类型的值

在创建数组时的默认值:

  • 对象数组:默认值为null
  • 数值型:自动化初始化为0
  • 字符型(char):也被自动初始化为(char)0
  • 布尔型(boolean):默认初始化为false

数组与泛型

通常,数组与泛型不能很好地结合,不能实例化有参数化类型的数组。

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

擦除会移除参数类型信息,而数组必须知道他们所持有的确切类型,以强制保证类型安全。

泛型在类或方法的边界处很有效,而在类或方法的内部,擦除通常会使泛型变得不适用。

Arrays类及其方法

equals()	// 用于比较两个数组是否相等(deepEquals()用于多维数组)
fill()		//用给定的值去填充各个位置。对于对象而言是复制同一个引用进行填充。
sort()		// 对数组排序
binarySearch()//
toString()  //产生数组的String表示
hashCode()  // 产生数组的散列码
Arrays.asList(T... a)// 接受任意序列或数组作为其参数,并将其转为List容器

复制数组的方法System.arraycopy(),用它复制数组比用for循环复制要快的多。
arraycopy(Object src,int srcPos, Object dest, int destPos, int length)
参数依次表示:源数组,表示从源数组的什么位置开始复制的偏移量,表示从目的数组的什么位置开始复制的偏移量,以及需要复制几个元素。
如果复制的是对象数组,则只是复制对象的引用,而不是对对象本身的拷贝,即浅拷贝

System.arraycopy()不会执行自动拆包和装包,两个数组必须具有相同的确切类型。

总结

数组强调的是性能,而不是灵活性。

在1.5之后的java中。因优先选择容器(因为有泛型的支持,使得容器可以存储基本类型(中间经历了自动装箱与拆箱的过程))。

原文地址:https://www.cnblogs.com/minghaiJ/p/11243499.html