一、数组定义
数组是相同类型数据的有序集合。数组描述的是相同类型的若干个数据,按照 一定的先后次序排列组合而成。数组中每个数据称作一个元素,每个元素则可以通过一个索引(下标)来访问它们。数组的三个基本特点:
1、长度是确定的。数组一旦被创建,它的大小就是不可以改变的。
2、其元素必须是相同类型,不允许出现混合类型。
3、数组类型可以是任何数据类型,包括基本数据类型和引用类型。
注: 数组变量属于引用类型,数组也可以看成是对象,数组中的每个元素相当于该对象的成员变量。数组本身就是对象,Java中对象是在堆中的,因此数组无论保存原始类型还是其他对象类型,数组对象本身是在堆中存 储的。
二、数组的声明
一维:元素类型数组名[ ];或元素类型 [ ] 数组名;
例:float a [];或 float [] a;
二维:元素类型数组名[ ] [ ];或元素类型[ ] [ ]数组名;
例:float a [][];或 float [] []a;
三、创建数组
数组名 = new元素类型[元素个数];
float[] a = null;
a = new float[4];
float[][] a = null;
a = new float[4][5];
注意:java中声明数组和创建数组可以一步完成
int[] s = new int[10];
float a[][] = new float[4][4];
java允许使用int型变量的值指定数组元素的个数
intsize =30;
double[] d =newdouble[size];
四、获取数组的长度
length就是数组元素的个数
int[] a = new int[4];int[][] d = new int[3][5];
System.out.println("a="+a.length);
System.out.println("d="+d.length);
输出a=4 d=3;
五、数组初始化
数组的声明创建初始化一步完成:
float a[] = {2.3f, 3.1f, 2.0f, 6.2f};
int b[][] = {{1}, {1, 2}, {1, 2, 3}, {2, 4, 5}};
六、数组复制
1、arraycopy方法
用System类调用arraycopy方法。
System.arraycopy(a ,x1 ,b ,x2 ,length);
将数组a中从x1开始到length个元素复制到数组b,数组b从x2开始存放这些数据;数组b必须满足b.length-x2>a.length-x1;也就是说数组b必须有足够的位置存放从数组a中复制过来的数据;
例:
importjava.util.*;
publicclassdemo{
publicstaticvoidmain(String args[]) {
int[] a = {2,3,4,1,5,6,7,8,9,11},//10位
int [] b= {33,56,78,1,4,0,54,5,7,99,12,13};//12位
System.arraycopy(a,0,b,1,a.length);
System.out.println(Arrays.toString(b));
}
}
运行结果:[33, 2, 3, 4, 1, 5, 6, 7, 8, 9, 11, 13]
2. copyOf和copyOfRange方法
用Arrays类调用copyOf和copyOfRange方法
b= Arrays.copyOf(a, y);
将数组a从下标x开始长度为y的元素复制到数组b中;
b= Arrays.copyOfRange(a, x, y);
将数组a从下标x开始长度为y-x的元素复制到数组b中。
例:CopyArray.java
importjava.util.Arrays;
publicclassCopyArray{
publicstaticvoidmain(String[] args){
int[] a = {4,2,5,96,28,3,9,8,6,33,};//定义数组a并赋值
int[] b,c,d;//定义数组b,c,d
System.out.println("数组a="+Arrays.toString(a));
b = Arrays.copyOf(a,a.length);//复制数组a到数组b
System.out.println("数组b="+Arrays.toString(b));
c = Arrays.copyOf(a,4);//复制数组a中前4位到数组c中
System.out.println("数组c="+Arrays.toString(c));
d = Arrays.copyOfRange(a,6,a.length);//复制数组a中后四位(第6位到最后一位)
System.out.println("数组d="+Arrays.toString(d));
c[c.length-1] = -100;//将-100赋给数组c中最后一位
System.out.println("数组c="+Arrays.toString(c));
}
}
运行结果:数组a=[4, 2, 5, 96, 28, 3, 9, 8, 6, 33]
数组b=[4, 2, 5, 96, 28, 3, 9, 8, 6, 33]
数组c=[4, 2, 5, 96]
数组d=[9, 8, 6, 33]
数组c=[4, 2, 5, -100]
数组输出用:Arrays.toString(数组名)
3、getChars(start,end,char c[],x)方法
复制部分字符。将当前字符串从位置start到end-1的位置上的字符复制到数组c中,数组c从x处开始存放。
toCharArray()方法。将字符串全部字符存放入数组中。
例:
Strings ="abcdefg";//定义字符串s
char a[] = new char[3];//声明创建数组
s.getChars(2,5,a,0);//将字符串s从下标2到下标4复制到数组c中,c从下标0处存放
运行结果:cde
七、数组替换
1、fill(int[] arr,int value);
替换所有
该方法可将指定的value值分配给数组arr的每一个元素。
float[]b={2.3f,3.1f,2.0f,6.2f,2.4f,0.9f};
Arrays.fill(b,6);//将b中所有元素替换成6
运行后b为{6.0f, 6.0f, 6.0f, 6.0f, 6.0f, 6.0f}
2、fill(int[] arr,int begin, int end, int value);
替换部分
该方法可将数组arr中从下标begin到下标end位置的所有元素替换成value
float[]b={2.3f,3.1f,2.0f,6.2f,2.4f,0.9f};
Arrays.fill(b,0,3,6);
运行后b为{6.0f, 6.0f, 6.0f, 6.2f, 2.4f, 0.9f}
如果指定的索引位置大于或等于要进行填充的数组的长度,则会报出ArrayIndexOutOfBoundsException(数组越界异常)异常(比如end>arr.length)。
七、数组排序
通过Arrays类的静态sort()方法可以实现对数组的排序。sort方法提供了多种重载形式,可对任意类型的数组进行升序排序。
float[] b = {2.3f,3.1f,2.0f,6.2f,2.4f,0.9f};
Arrays.sort(b);
for(inti =0; i < b.length; i++) {
System.out.println("第"+i+"个元素是:"+b[i]);
}
运行后b为 {0.9f, 2.0f, 2.3f, 2.4f, 3.1f, 6.2f}
八、连接两个数组
使用ArrayUtils.addAll方法将两个数组连接成一个
String[] array1 = {"as","ff","fd","oo"};
String[] array2 = {"mm","lk","ui"};
//org.apache.commons.lang.ArrayUtils;
String[] t = (String[]) ArrayUtils.addAll(array1, array2);
运行后t为{"as", "ff", "fd", "oo", "mm", "lk", "ui"}
文末总结:
数组在实际开发中使用的情况一般来说并不是特别多(相对集合来说),实际开发使用比较多的是集合(后面会讲),但是数组是有用的,没有数组就没有集合Collection,集合的底层就是使用数组实现的。二维数组属于Java学习的入门知识,是Java学习的基础,所以对数组的理解很重要,毕竟有了基础才能提升嘛!
另外我还准备了Java数组的视频教程供各位小伙伴们学习:
想学习更多关于Java的知识,关注微信公众号【Eric学习java】,回复【ericjavabase1001】可免费领取Java学习视频教程链接哦!注意是免费哦,一切收费的都是骗子!