1、定义
数组是一个固定长度的,包含了相同类型数据的 容器。
数组访问下标范围是0到长度-1
数组的定义:
方式1: 数组元素的类型[] 数组名; int[] ages;推荐的. 可以吧int[]看成是一种数据类型,int类型的数组类型.
方式2:数组元素的类型 数组名[]; int ages[];
数组必须先初始化,才能使用,因为初始化表示在内存中分配空间.
初始化就是给数组元素分配内存,并为每个元素赋初始值。分为静态初始化和动态初始化。
静态初始化操作:
特点:有我们自己来为每一个数组元素设置初始化值,而数组的长度由系统(JVM)决定.
语法:数组元素类型[] 数组名 = new 数组元素类型[]{元素1,元素2,元素3,.......};
举例: int[] nums = new int[]{1,3,5,7,9};
简单写法,必须声明之后,立刻初始化,不能先声明后初始化:
int[] nums = {1,3,5,7,9};
错误举例:int[] nums1; nums1={12,34};
具体报错:Array constants can only be used in initializers
数组的动态初始化操作:
由我们来设置数组的元素个数(数组长度),而每一个数组元素的初始值有系统决定.
语法: 数组元素类型[] 数组名 = new 数组元素类型[ length ];
比如: int[] ages = new int[100];
int[] nums = new int[5]{1,3,5,7,9};//写法是错误的,不能同时使用静态初始化和动态初始化什么时候使用静态初始化,什么时候使用动态初始化.
当我们事先知道,需要存储哪一些数据的时候,选用静态初始化.
当我们事先不知道,需要存储哪些数据的时候,只能使用动态初始化
数组一旦被定义,它的维数和维界就不再改变。因此,除了结构的初始化和销毁之外,数组只有存取元素和修改元素值的操作,无插入删除操作。
2、多维数组
严格上说,在Java中不存在多维数组的概念,和C语言做区分,一般称之为数组中的数组.
一维数组:数组中的每一个元素都是一个值(基本类型和引用类型的值).
二维数组:数组中的每一个元素又是一个一位数组.
三维数组:数组中的每一个元素又是一个二维数组.
多维初始化和一维类似,用到时可自行查看语法。
3、java5对数组的新语法支持
1):增强for循环-foreach
通过反编译工具查看字节码,发现foreach其实在底层依然是使用for循环+索引来操作数组的.
我们把增强for循环,称之为编译器的新特性---->语法糖.
语法糖的最大甜头就是:让开发者写更少,更简单的代码,完成相同的功能.
2):方法的可变参数(语法糖)
方法的可变参数,说的是参数的个数可变.,其底层是就是一个数组类型.
可变参数必须作为方法的最后一个参数,避免参数的歧义性.
推论:方法最大只有一个可变参数.
http://blog.csdn.net/testcs_dn/article/details/38920323
这篇文章还不错
可变参数是兼容数组类参数的,但是数组类参数却无法兼容可变参数。
4、数组拷贝
System.arraycopy(src, srcPos, dest, destPos, length)
该方法使用了native修饰符(本地方法),该方法底层使用了C/C++语言实现了
Java直接调用其他语言编写好的功能:
5、java自带的数组工具类(Arrays)
java.util.Arrays.方法(参数);
常用:copyOfRange 数组复制 toString() 转换为字符串
sort 排序 binarySearch 搜索 equals 判断是否相同 fill 填充
6、其他
关于数组,必须提到的算法:冒泡排序、选择排序、线性查找、折半查找(顺序存储,元素有序)。算法部分内容,以后重开一个文集做记录。