一、数组是什么?
数组是相同类型元素的一个集合。它在内存上是一段连续的空间,每个空间都有自己的编号(数组的下标),起始位置为0,依次递增。
二、数组的创建及其初始化
1、数组的创建
T[] 数组名 = new T[N];
其中,T为数据类型;T[ ]为数组类型;N为数组的长度。比如:
int[] arr1 = new int[10];//创建一个可以容纳10个int类型元素的数组
double[] arr2 = new double[5];//创建一个可以容纳5个double类型元素的数组
String[] arr3 = new String[3];//创建一个可以容纳3个字符串元素的数组
以第一条为例:int 是一个整型的数据类型;int[ ]是arr1这个数组的数组类型;arr1为数组名;10为数组的长度。
2、数组的初始化
int[] arr1 = new int[5];
int[] arr2 = new int[] {1, 2, 3, 4, 5};
String[] arr3 = {"苹果","香蕉","雪梨","荔枝"};
double[] arr4 = {1.0, 2.5, 6.8, 3.6};
第一条为动态初始化,在创建数组的时候,直接指定数组的元素个数,但是没有给它规定数据内容。
第二、第三、第四条都为静态初始化,创建数组的时候并没有直接指定数组的元素个数,而是直接指定数组里面的数据内容。
注意点:
1、静态初始化的数组它的元素类型一定要跟数据类型的类型一致。 如:在arr3数组中,“苹果”,“香蕉”…都是被双引号括着的,表示是字符串类型,因此,比如"苹果"这个元素就是字符串类型的元素,是跟数据类型是相一致的。
2、静态初始化的数组虽然没有指定元素个数,但会根据规定的数据内容中的元素个数来确定数组的长度。
如:第arr2数组中,里面有的数据内容有5个元素,所以arr2的数组长度为5。
3、静态初始化的可以简写,可以不要等号右边的 new 数组类型, 如:
int[] arr = new int[] {1, 2, 3, 4, 5};//可以简写成
int[] arr = {1, 2, 3, 4, 5};
值得注意的是:虽然我们打代码的时候简写了,但是编译器编译代码时会帮我们还原成未简写的形式。简写只是为了让打代码的人更省事。
3、如果数组未被初始化,数组的元素有其默认值
三、数组的元素访问
1、数组是一段连续的内存空间,支持随机访问,即可通过数组下标来访问任一位置的元素
2、数组下标从0开始,到N结束。即:介于[0,N)的范围内。N为元素个数,不能越界,否则会出现下标越界异常。
以上的思维导图有助于你们对整体的一个理解,下面我拿几段代码来举例:
public class SZBL1 {
//逐一访问
public static void main(String[] args) {
int[] array = {1, 12, 33, 4, 5};
System.out.println(array[0]);//输出 1
System.out.println(array[1]);//输出 12
System.out.println(array[2]);//输出 33
System.out.println(array[3]);//输出 4
System.out.println(array[4]);//输出 5
}
}
public class SZBL1 {
public static void main(String[] args) {
int[] array = {1, 12, 33, 4, 5};
for (int i = 0; i < array.length ; i++) {
}
}
}
输出的结果为1 12 33 4 5
public class SZBL1 {
public static void main(String[] args) {
int[] array = {1, 12, 33, 4, 5};
for ( int i: array) {
System.out.print(i+" ");
}
}
}
输出的结果也为1 12 33 4 5
其中,值得注意的是for(int i : array)语句中的 int 指的是变量的数据类型,i为变量,array为数组名
四、数组的应用
以上的思维导图有助于你们对整体的一个理解,下面我拿几段代码来举例(剩下的你们可以自行去检验):
import java.lang.reflect.Array;
import java.util.Arrays;
public class CreatSZ {
//数组部分拷贝
public static void main(String[] args) {
int[] array = {1, 2, 3, 4, 5};
int[] copy = Arrays.copyOfRange(array, 1, 3);
System.out.println(Arrays.toString(copy));
}
值得注意的是: int[] copy = Arrays.copyOfRange(array, 1, 3);这句话中的(array,1,3)分别值得是数组名,从1下标到3下标,我们数组的下标检索是从0开始的,采用左闭右开的形式来访问,因此 ,这里输出的值只有2,3
import java.lang.reflect.Array;
import java.util.Arrays;
public class CreatSZ {
//数组的全部拷贝
public static void main(String[] args) {
int[] array = {1,2,3,4};
int[] copy = Arrays.copyOf(array,array.length);
for (int i = 0; i < array.length; i++) {
copy[i] = array[i];
}
System.out.println(Arrays.toString(array));
}
}
这里是把整个数组的数据都拷贝下来了,[0,N),输出1 2 3 4
import java.lang.reflect.Array;
import java.util.Arrays;
public class CreatSZ {
//数组的扩容
public static void main(String[] args) {
int[] array = {1,2,3,4};
array = Arrays.copyOf(array,array.length*2);
System.out.println(Arrays.toString(array));
}
}
这里是把整个数组的数据都拷贝下来了,然后还增多了一倍的空间,这时那些多的空间还没有被初始化,所以用相应的数据类型的默认值填充。(默认值上文有提及)
因此,这里输出的结果是1 2 3 4 0 0 0 0
以上便是我对一维数组的讲解,希望对大家有所帮助!!!