码迷,mamicode.com
首页 > 编程语言 > 详细

Java学习树--4数组的学习

时间:2021-06-07 21:06:31      阅读:0      评论:0      收藏:0      [点我收藏+]

标签:end   数据类型   二分查找   不同的   rom   表达   数据   默认   int()   

数组的声明

    int[] a;
    short[][] as;
    short s,aas[][]; //但通常将[][]放在变量之前
    Object[] ao,aos;
    Collection<?>[] u; //声明具体元素类型未知的数组

数组的创建

数组在创建之前,不能使用,数组的创建有两种,一种是直接使用创建表达式,指定数组的长度,另一个方式是直接对数组进行初始化。在数组创建后,能使用数组的final length变量访问数组的长度。

Exception ae[] = new Exception[3];
Object aao[][] = new Exception[2][3];
int[] factorial = { 1, 1, 2, 6, 24, 120, 720, 5040 };
char ac[] = { ‘n‘, ‘o‘, ‘t‘, ‘ ‘, ‘a‘, ‘ ‘,‘S‘, ‘t‘, ‘r‘, ‘i‘, ‘n‘, ‘g‘ };
String[] aas = { "array", "of", "String", };
ae.length //创建的数组能访问.length属性 

数组的访问

int [] a={1,2,3}
a[0]=2;
a[2]=2;
for(int x:a){System.out.Println(x); } //2 2 2

如果数组的访问出界,会抛出ArrayIndexOutOfBoundsException。

数组的存储异常

ArrayStoreException,数组的创建类型和存储类型不一致引发的异常。


class Point { int x, y; }
class ColoredPoint extends Point { int color; }
class Test {
public static void main(String[] args) {
ColoredPoint[] cpa = new ColoredPoint[10];
Point[] pa = cpa;
System.out.println(pa[1] == null);
try {
pa[0] = new Point(); //实际声明类型是子类型引用
} catch (ArrayStoreException e) {
System.out.println(e);
}
}
}
//This program produces the output:
//true
//java.lang.ArrayStoreException: Point

数组的复制

数组的复制最常规的方法之一,当然就是直接使用for循环。

对于一维数组可以使用 clone()方法,次方法复制的数组是深拷贝

 int[] a={1,2};
        int[] b=a.clone();
        System.out.println(a==b); //fasle
        b[1]++;
        System.out.println(b[1]); //3
        System.out.println(a[1]); //2

System.arraycopy(src,srcPos,dest,destPos,length);
src:原数组
srcPos:从原数组的起始位置+
dest:目标数组
destPos:目标数组开始的的位置
length:要Copy的数组长度


Arrays.copyOf(original, newLength);//返回一个新的数组 coriginal:原数组 newLength:新数组的长度 注意:1. 新数组的长度   如果写的比原数组的长度小,那就只复制到哪里   如果写的比原数组的长度长,没复制的地方,会是默认值

注意以上的方法都是一维数组的复制方式,也只适用一维数组,其他维数组的复制方式是拆分成为一维数组在进行复制。
数组的拼接也可以借助数组的复制实现

数组的辅助类Arrays

常需要用到的方法


Arrays.copyOf() Arrays.copyOfRange([]origin,from,to) 这两个静态方法实现了全部的基本数据类型数组的复制,后者是数组的范围复制


Arrays.binarySearch([]array,key) Arrays.binarySearch([]array,from,to,key) 使用了二分查找算法实现数组内元素的查找和范围查询,这个方法实现了泛型T,借助比较器也能使用查询方法。


Arrays.compare([]a,[]b) 比较两个数组语序上是否相等,如果返回0,表面数组相等,返回1,代表数组a大


Arrays.equals([]a,[]b) Arrays.equals(a, b) == (Arrays.compare(a, b) == 0);Arrays.equals(a, b) 返回真,那么Arrays.hashCode(a) == Arrays.hashCode(b).


Arrays.fill([]a,key) 用key填充数组,也有范围填充重载


Arrays.sort([]a) 数组排序,也可以进行范围内的数组排序


Arrays.mismatch([]a,[]b) 比较两个数组语序上的差异,如果数组相等返回-1,返回两个数组开始不同的第一个索引。索引的范围是0到最小数组的长度,这个方法可以计算两个数组的相同前缀,前缀长度就是返回值

Java学习树--4数组的学习

标签:end   数据类型   二分查找   不同的   rom   表达   数据   默认   int()   

原文地址:https://www.cnblogs.com/lin7155/p/14851363.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!