概念:同一种数据类型的集合,其实数组就是一个容器。数组属于引用型变量。
1、声明数组
1>声明一维数组的两种格式:
数组的元素类型 数组名字[];
数组的元素类型[] 数组名字;
2>声明二维数组的两种格式:
数组的元素类型 数组名字[][];
数组的元素类型[] 数组名字[];
注:Java不允许在声明数组的方括号内指定数组元素的个数。
2.创建数组
分配内存空间,即创建数组。格式:
数组名字 = new 数组元素的类型[数组元素的个数];
通过new建立的实例都存放在堆内存中,主要是数组和对象;局部变量(方法中的变量、方法中的参数变量、for循环中的变量)都存放在栈内存中。
数组变量存放的是堆中分配的内存单元的首地址。
声明数组可以和创建数组一起完成,例如:
int[] arr = new int[3];
3.长度、初始化、输出
1>一维数组:“数组名.length”表示数组中元素的个数
二维数组:“数组名.length”表示含有的一维数组的个数
2>创建数组后,系统会给每个数组元素一个默认值,如int型是0.
也可以声明数组时初始化,例如:
int[] x = {1,2,3};
或
int[] x = new int[3];
x[0] = 1;x[1] = 2;x[2] = 3;
3>可以循环输出;
也可以让Arrays类调用:
Public static String toString(int[] a)方法。
输出格式为:System.out.println(Arrays.toString(a));
4.数组的引用
如果两个相同类型的数组具有相同的引用,它们就有完全相同的元素。
int[] x = new int[3];
int[] y = x;
y[1] = 89;
System.out.println(x[1]);的值为89
System.out.println(x);输出的是数组的引用
当数组是char型数组时,输出的是所有元素的值,例如:
char[] s = {‘a’,’b’,’c’};
System.out.println(s);的结果是:abc
如果想输出char型数组的引用,必须让数组s和字符串做并置运算。例如:
System.out.println(“ ”+s);
5.复制数组
1>arraycopy 方法
让System类调用方法:
Publlic static void arraycopy(sourceArray,int index1,copyArray,int index2,int length)
说明:将数组sourceArray从索引index1开始的length个元素中的数据复制到数组copyArray中,copyArray数组从index2开始存放这些数据。
例如:
import java.util.Arrays;
Public cass Example
{
Public static void main(String args[])
{
char[] a = {‘a’,’b’,’c’,’d’};
b ={‘1’,’2’,’3’,’4’};
System.arraycopy(a,0,b,1,2);
System.out.println(Arrays.toString(b));
}
}
运行结果为:[1,a,b,4]
2>copyOf和copyOfRange方法
让Arrays类调用方法:
Public static int[] copyOf(int[] original,int newlength)
说明:把参数original指定的数组中从0索引开始的newLength个元素复制到一个新数组中,并返回这个新数组,新数组的长度为newLength.
返回类型还有float[]、double[]、char[]等。例如:
Int[] a = {100,200,300};
Int[] b = Arrays.copyOf(a,4);
那么b[0] = 100,b[1] = 200,b[2] = 300,b[3] = 0.即b的长度为4,最后元素取默认值。
把数组中部分元素复制到另一个数组中,例如:
Public static int[] copyOfRange(int[] original,int from,int to)
说明:把参数original指定的数组中从索引from至to-1 的元素复制到一个新数组中,并返回这个新数组,数组长度to-from。
6.排序与使用二分法查找
Arrays类调用方法:
Public static void sort(int[] a)
把参数a指定的数组按升序排序。
Arrays类调用方法:
Public static void sort(int[] a,int start,int end)
把参数a指定的int型数据中索引start至end-1中的元素按升序排列。
Arrays类调用方法(二分法):
Public static void binarySearch(int[] a,int number)
判断参数number指定的数是否在参数a指定的数组中。数组a必须事先已排序。如果number和数组a中某个元素相同,返回该元素的索引,否则返回一个负数。
插入一个数仍然有序二分代码:
Public static int binarysearch(int[] arr,int number)
{
Int max = arr.length-1;
Int min = 0;
Int mid;
While(min <= max)
{
Mid = (min + max)/2;
If(arr[mid] = number)
Return mid;
Else if(arr[mid] < number)
Min = mid +1;
Else
Max = mid -1;
}
Return min;
}