Java数组类型

数组是一种数据结构,用来存储同一类型之的集合。通过一个整形下标可以访问数组中的每一个值。

在声明数组变量时,需要指出数据类型和数组变量的名字。下面声明了整形数组a

int[] a;

这条语句之声明了变量啊,病没有将a初始化为一个正真的数组。应该使用new运算符创建数组。

int [] a = new int[100];

数组长度不要求是常量,new int[n]将会创建一个长度为n的数组

可以使用下面两种形式声明数组

int[] a   或   

int a[] 

大多数喜欢第一种风格,我们也建议使用第一种。

创建一个数字数组时,所有元素都初始化为0。boolean数组的元素会初始化为false。对想数组的元素则初始化为一个特殊值null

一旦创建了数组,就不能改变它的大小。

扫描二维码关注公众号,回复: 2170978 查看本文章

1. for each循环

Java有一种功能很强的循环结构,可以用来依次处理数组中的每个元素而不必为制定下标值而分心,这种增强的for循环的语句格式为:

for (variable : collection)  statement

使用for each循环语句显得更加简洁‘更不易出错(不必为下标的起始值和终止值而操心)

public static void main(String[] args) {
    int[] a = new int[10];
    for( int i = 0 ; i < 10 ; i++ ) {
        a[i] = i+1;
    }
    for(int aa : a) {
	System.out.print(aa + " ");
    }
}

结果为:

1 2 3 4 5 6 7 8 9 10 

2. 数组初始化和匿名数组

Java中,提供了一中创建数组对象并同时赋予初始值的简化书写形式。下面是一个例子

int[] smallPrimes = { 2,3,5,7,11,13 };

甚至还可以初始化一个匿名数组

new int[] { 17,19,21,23,25,27 };

这种表示法将创建一个新数组并利用括号中的提供的只进行初始化,数组的大小就是初始值的个数。使用这种语法形式可以在不创建新变量的情况下重新初始化一个数组。例如:

smallPrimes = new int[] { 17,19,21,23,25,27 };

3. 数组拷贝

java中,允许将一个数组变量拷贝给另一个数组变量。这时,两个变量将引用同一个数组:

int[] lucknumbers= smallPrime;
lucknumbers[5] = 12 ;

下面我们举个例子

public static void main(String[] args) {
    int [] aa = new int[] {1,2,3,4,5,6};
    int [] bb = aa;		
    bb[3] = 100;
    System.out.println(bb[3]);
    int[] cc = Arrays.copyOf(aa,5);
    aa[3] = 600;
    System.out.println(aa[3]);
}

结果为:

100
600

如果数组是数值型,那么多余的元素将被赋值为0;如果数组元素是布尔型,则将赋值为false。相反,如果长度小于原始数组的长度,则只拷贝最前边的元素。

上面讲的是浅复制,接下来我们来说说深复制


他又新开了一片区域来存放变量的值,原来只是两个变量指向了一个值。

4. 命令行参数

每一个Java应用程序都有一个带String arg[]参数的main方法。这个参数表明main方法将接受一个字符串数组,也就是命令行参数。

public static void main(String[] args) {
    for(int i = 0 ; i > args.length ; i++) {
        System.out.println(args[i]);
    }
}

结果为:

AAA BBB CCC
AAA
BBB
CCC

5. 数组排序

要想对数值型数组进行排序,可以使用Arrays类中的sort方法:

这个方法使用优化的快速排序法。快速排序算法对于大多数数据集合来说都是效率比较高的。

(1)static  String toString(type[] a) : 返回包含a中的数据元素的字符串,这些数据元素被放在括号内,并用逗号分隔。

(2)Static  type copyOf(type[] a, int length) : 返回与类型a相同的一个数组,其长度为length或者end-statr

public static void main(String[] args) {
    int[] a = new int[] {5,4,3,6,2,7,1};
    Arrays.sort(a);
    for(int aa : a) 
        System.out.print(aa+" ");
}

输出结果为:

1 2 3 4 5 6 7 

接下来我们代码实现一些常用方法:

public static void main(String[] args) {
    int [] a = new int[] {6,8,9,4,2,3,1};
    System.out.println(Arrays.toString(a));
    int[] c = Arrays.copyOf(a,4);
    for(int c1 : c ) {
        System.out.print(c1+" ");
    }
    System.out.println();
    Arrays.sort(a);
    for(int a1 : a ) {
        System.out.print(a1+" ");
    }
    System.out.println();
    int [] b = new int[] {1,2,3,4,6,8,9};
    System.out.println(Arrays.equals(a, b));
}

结果为:

[6, 8, 9, 4, 2, 3, 1]
6 8 9 4 
1 2 3 4 6 8 9 
true

6. 多维数组

声明一个二维数组相当简单。例如:

double[][] balances;

与一位数组一样,在调用new对多维数组进行初始化之前不能使用它,在这里可以使用这种初始化:

balances = new double[n][m];

下面我们简单的声明并遍历多维数组:

public static void main(String[] args) {
    int [][] a = new int[][] {
        {1,2,3},
	{2,1,6},
	{4,2,5},
	{8,4,8},
	{9,3,0}
    };

    for(int a1[] : a) {
        for(int a2 : a1) {
	    System.out.print(a2 + " ");
	}
	System.out.println();
    }
}

上面的执行结果为:

1 2 3 
2 1 6 
4 2 5 
8 4 8 
9 3 0 

7. 不规则数组

Java实际上没有多维数组,只有一维数组。多维数组被解释为数组的数组。


要想创建一个不规则数组,首先需要分配一个具有所含行数的数组,接下来,分配这些行。再分配了数组之后,假定没有超出边界,就可以采用通常的方式访问这些元素了。

public static void main(String[] args) {
    int [][] a = new int [10][];
    for( int i = 0 ; i < a.length ; i++ ) {
        a[i] = new int[i+1];
    }

    for(int a1[] : a) {
	for(int a2 : a1) {
	    System.out.print(a2 + " ");
	}
	System.out.println();
    }
}

输出的结果为:

0 
0 0 
0 0 0 
0 0 0 0 
0 0 0 0 0 
0 0 0 0 0 0 
0 0 0 0 0 0 0 
0 0 0 0 0 0 0 0 
0 0 0 0 0 0 0 0 0 
0 0 0 0 0 0 0 0 0 0 

猜你喜欢

转载自blog.csdn.net/qq_36186690/article/details/81032975
今日推荐