请优先使用高级容器集合,除非证明用数组确实效率高,否则当然优先使用容器集合。
1. 数组是一种效率最高的存储和随机访问对象引用序列的方式,其代价就是固定大小。ArrayList的效率比数组低很多。不可越界否则产生RuntimeException。
2. 无论使用哪种类型的数组,数组标识符其实只是一个引用,指向在堆中创建的一个真实对象,这个对象用以保存指向其他对象的引用。
3. 对象数组:保存引用;所有引用被自动初始化为null;可以使用静态方法Arrays.deepToString(多维数组),返回多个String对象
基本类型数组:直接保存基本类型的值;数值型自动初始化为0,char型自动初始化为(char)O,bollean自动初始化为false;可以使用静态方法Arrays.deepToString(多维数组),返回多个String对象
4. int[] a=new int[5]; int[] b = new int[6];
a=b; a将指向数组b;
5.数组与泛型
6. 数据生成器:Generator类。所有生成器嵌套在CountingGenerator类中,例如要创建Integer对象的生成器可以通过表达式new CountingGenerator.Integer()来创建。注意:CountingGenerator.String类使用CountingGenerator.Character来填充一个字符数组,该数组被转换为String,但是CountingGenerator.String使用的是基本的Generator<java.lang.Character>,而不是具体的对CountingGenerator.Character的引用。
7.Arrays类
包含有用于数组的静态方法,equals():比较内容是否相同;fill():填充数组;sort():对数组排序;binarySearch():用于在已排序的数组中查找元素;toString()产生数组的String表示,返回格式:[a1,a2,a3];hashCode():产生数组的散列码;Arrays.asList()接受任意的序列或数组作为其参数,并将其转变为List容器
7.1 一个不属于Arrays但很有用的方法
静态方法:System.arraycopy(),用它来复制数组比用for循环要快很多。针对所有类型都做了重载。
import java.util.Arrays;
public class Niuke {
public static void main(String[] args) {
int[] i = new int[7];
int[] j = new int[10];
Arrays.fill(i, 47);
Arrays.fill(j, 99);
System.out.println("i = " + Arrays.toString(i));
System.out.println("j = " + Arrays.toString(j));
System.arraycopy(i, 0, j, 0, i.length); //将数组i从0复制到j,从j[0]开始,i.length为要复制的元素个数
System.out.println("j = " + Arrays.toString(j));
Integer[] u = new Integer[10];
Integer[] v = new Integer[5];
Arrays.fill(u, 47);
Arrays.fill(v, 99);
System.out.println("u = " + Arrays.toString(u));
System.out.println("v = " + Arrays.toString(v));
System.arraycopy(v, 0, u, u.length / 2, u.length/2);
System.out.println("u = " + Arrays.toString(u));
}
}
/*
i = [47, 47, 47, 47, 47, 47, 47]
j = [99, 99, 99, 99, 99, 99, 99, 99, 99, 99]
j = [47, 47, 47, 47, 47, 47, 47, 99, 99, 99]
u = [47, 47, 47, 47, 47, 47, 47, 47, 47, 47]
v = [99, 99, 99, 99, 99]
u = [47, 47, 47, 47, 47, 99, 99, 99, 99, 99]
*/
Ststem.arraycopy( 源数组,源数组开始位置 ,目标数组 ,目标数组开始位置 ,需要复制元素的个数),不可越界,并且不会自动包装和拆包,所以,需要两数组类型相同。
此例子表示,基本类型数组和对象数组都可以复制,当然,复制对象数组,只是复制了对象的引用而不是对象本身的拷贝,这被称为“潜复制”。
Arrays.binarySearch():
1.首先要对查找的数组做Arrays.sort()排序;2.其算法为二分查找,返回索引号;3.数组中有重复的元素,查找时随机返回任意一个索引号。对于对象类型需要传入改写的Comparator作为参数!