javaSE学习11_数组

概述

数组是一种数据结构,用来存储同一类型的集合。通过一个整数下标可以访问数组中的每一个值。例如,如果a是一个整型数组,a[i]就是数组中下标为i的整数。


数组声明

在声明数组变量时,需要指出数组类型(数组元素类型紧跟 [])和数组变量的名字。下面声明了整型数组a:

int[] a;


数组初始化

数组初始化有如下两种方式。

1.静态初始化:初始化时由程序员显式指定每个数组元素的初始值,由系统决定数组长度。

2.动态初始化:初始化时程序员只指定数组长度,由系统为数组元素分配初始值。


静态初始化

静态初始化语法如下:

arrayName = new type[]{element1,element2,element3……};

例如:

int[] a= new int[]{1,2,3,4,5};

其中type与显示指定的数组元素值得类型相同,或者是其子类的实例

例如:

Object[] a = new String[]{'1','2','3'};


除此之外:静态初始化还有如下简化的语法格式:

type[] arrayName = {element1,element2,element3……};

例如

int[] a ={1,2,3,4,5};


动态初始化

在数组声明中:int[] a; 

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

int[] a = new int [100];

这条语句创建了一个可以存储100个整数的数组。数组长度不要求是常量:new int[n]会创建一个长度为n的数组。


创建一个数字数组时,所有元素都初始化为0。boolean数组的元素会初始化为false。对象数组的元素则初始化为一个特殊值null,这表示这些元素还未存放任何对象。例如:

String[] names = new String[10];

会创建一个包含10个字符串的数组,所有字符串都为null。


数组拷贝


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

例如:

int[] a ={1,2,3,4,5};

int[] b =a;

b和a将引用同一个数组。

如果希望将一个数组的所有值拷贝到一个新的数组中去,就需要使用Arrays类的copyOf方法:

int[] b = Arrays.copyOf(a,a.length);

第二个参数是新数组的长度。这个方法通常用来增加数组的大小:

b=Arrays.copyOf(b,2*b.length);

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


数组排序


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


1. 数字排序  int[] intArray = new int[] { 4, 1, 3, -23 };

  Arrays.sort(intArray);

  输出: [-23, 1, 3, 4]

2. 字符串排序,先大写后小写 String[] strArray = new String[] { "z", "a", "C" };

  Arrays.sort(strArray);

  输出: [C, a, z]     //按照ASCII的升序排序。

3. 严格按字母表顺序排序,也就是忽略大小写排序 Case-insensitive sort

  Arrays.sort(strArray, String.CASE_INSENSITIVE_ORDER);

  输出: [a, C, z]

4. 反向排序, Reverse-order sort  按照ASCII的降序排序。

  Arrays.sort(strArray, Collections.reverseOrder());

  输出:[z, a, C]

5. 忽略大小写反向排序 Case-insensitive reverse-order sort

  Arrays.sort(strArray, String.CASE_INSENSITIVE_ORDER);

  Collections.reverse(Arrays.asList(strArray));

  输出: [z, C, a]


数组越界异常


如果创建了一个100个元素的数组,并且试图访问a[100](或者任何在0~99之外的下标),程序就会引发“array index out of bounds”异常而终止执行。

我们可以使用try catch捕获这种异常:

public static void main(String args[]){
		String[] str={"1","2"};
		try {
			System.out.println(str[3]);
		} catch (ArrayIndexOutOfBoundsException e) {
			System.out.println("数组越界");
		}
		
	}
要想获取数组中元素个数,可以使用 a.length。例如:

for(int i=0;i<a.length;i++)

    System.out.println(a[i]);


上面的代码打印出了a数组的所有元素,还有个更加简单的方式。要想打印数组,可以调用Arrays类的toString方法。

例如上面的代码可以改为:

System.out.println(Arrays.toString(a));


补充说明

一旦创建了数组,就不能再改变它的大小。如果经常需要在运行过程中扩展数组的大小,就应该使用另一种数据结构---数组列表(array list)后文中会有介绍。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值