数组的特殊性
数组与其他种类的容器的区别:效率、类型和保存基本类型的能力。其他容器在处理对象时,都是当做Object处理,而数组可以去持有某种具体类型,通过编译期检查可以防止错误类型使用。
数组是第一级对象
length是数组大小,而不是实际保存的元素个数。创建数组对象时,所有引用被自动初始化为null,数值为0,字符型为(char)O,布尔为false。
多维数组
数组与泛型
不能实例化具有参数化类型的数组:
Peel<Banana>[] peels = new Peel<Banana>[10];
但可以参数化数组本书的类型:
public T[] f(T[] arg){return arg;}
java允许创建泛型数组的引用, 然后创建非泛型的数组,将其转型:
List<String>[] ls;
List[] la = new List[10];
ls = (List<String>) la; // unchecked warning
ls[0] = new ArrayList<String>();
//Compile-time checking produces an error:
// ! ls[1] = new ArrayList<Integer>();
//如果你要直接生成一个泛型数组,抛出一个Unchecked warning
List<BerylliumSphere>[] spheres = (List<BerylliumSphere>[]) new List[10];
填充数组
- Arrays.fill(array, value):使用同一个值填充各个位置。
- 数据生成器Generator(next)
复制数组
System.arraycopy(源数组,开始复制位置,目标数组,目标复制开始位置,复制个数),比for循环快递。
比较数组
Arrays类提供了重载后的equals()方法,用来比较整个数组(元素个数相等,对应位置的元素也相等)。
java有两种方式提供比较功能,一是java.lang.Comparable接口(compareTo(obj)),当前对象小于返回负值,等于返回0,大于返回正值。
二是Comparator接口( equals()和compare(obj1, obj2)方法 )
数组排序
Arrays.sort( array, Comparable | Comparator)(基本数据类型数组无法使用Comparator进行排序)
在已排序的数组中查找使用Arrays.binarySearch(array, 比较器)执行快速查找,返回index。
找到目标,返回值大于等于0,否则,产生负返回值,表示若要保持数组的排序状态此目标元素所应该插入的位置,负值的计算方式:-(插入点)-1,插入点指第一个大于查找元素在数组中的位置。
网友评论