数组
数组与其他种类容器之间的区分有三方面:效率、类型和保存基本类型的能力。
在java中,数组是一种效率最高的存储和随机访问对象序列的方式。数组就是一个简单的线性序列,这使得元素访问非常快速。速度的代价就是数组大小固定并且在其生命周期内不可改变。
数组和容器如果越界会提示runtimeException。
随着自动包装机制的出现,容器已经可以和数组一样方便地运用于编程中了。数组仅存的优点就是效率。
无论哪种类型的数组,数组标识符只是一个引用,指向在堆中创建的一个真实的对象,这个对象用以保存指向其他对象的引用。
Arrays.deepToString方法可以将多维数组转换为多个String,基本类型数组的值在不进行显示初始化的情况下,会被自动初始化。对象数组会被初始化为null。
自动包装机制对应关系:
short Short
int Integer
long Long
char Char
float Float
double Double
粗糙数组:数组中构成矩阵的每个向量都可以具有任意长度。
数组和泛型不能很好地结合,擦除会移除参数类型信息。,而数组必须知道他们所持有的确切信息,以强制保证类型安全。但是可以参数化数组本身的类型。可以创建一个object,再将其转型,但是如果没有@SuppressWarning注解,将会在编译器得到一个“不受检查”的警告信息。
Arrays.fill():只能用同一个只填充各个位置,而针对对象而言,就是复制同一个引用进行填充。
java.util.Arrays,有一套用于数组的static方法,其中有六个基本方法:equals()用于比较两个数组是否相等(deepEquals(用于多维数组)),fill(),sort()用于数组排序,binarySearch()用于在已经排序的数组中查找元素,toString(),hashCode()产生数组的散列。
java标准类库中提供System.arraycopy()复制数组,比for循环快很多,并针对所有类型做了重载。System.arraycopy(i,0,j,0,i.length()),如果复制对象数组,只是复制了对象的引用,而不是对象本身的拷贝,被称为浅复制。
Collection中有一个reverseOrder()方法可以反转自然的排列顺序。Arrays.sort(a,Collections.reverseOrder());