Java数组
java——数组
1.数组概述
数组是存储多个变量(元素)的东西(容器),这多个变量的数据类型要一致。数组是存储同一种数据类型多个元素的集合。也可以看成是一个容器。 数组既可以存储基本数据类型,也可以存储引用数据类型。数组分为:一维数组和二维数组
2.一维数组
1.格式
格式1:数据类型[] 数组名;
格式2:数据类型 数组名[];
type var [ ] ; 或 type [ ] var ;
注意:这两种定义做完了,数组中是没有元素值的。所以必须初始化。
2.初始化概述
所谓初始化:就是为数组中的数组元素分配内存空间,并为每个数组元素赋值。
初始化分类:动态初始化和静态初始化。
3.初始化方式
动态初始化:初始化时只指定数组长度,由系统为数组分配初始值。
静态初始化:初始化时指定每个数组元素的初始值,由系统决定数组长度。
1)动态初始化格式
2)静态初始化格式
3)在内存中的分配
一维数组初始化后在内存中的分配图:
3.二维数组
1.概述
其实二维数组其实就是一个元素为一维数组的数组。
2.格式
3.举例
int a[][] = newint [3][];
a[0] = new int [2];
a[1] = new int [4];
a[2] = new int [3];
图解如下:
以二维数组为例,其实二维数组就相当于数组中包含数组,所以在声明的时候要先声明第一维度,如下:
a[0] = new int [2]; 相当于给第一个包含在内的数组声明了两个小格的内存,
a[1] = new int [4]; 相当于给第二个包含在内的数组声明了四个小格的内存,
a[2] = new int [3]; 相当于给第三个包含在内的数组声明了三个小格的内存,
理解了二维数组的概念应该就能理解多维的概念
4.二维数组的初识化
-
-
- 静态初始化: int inta[][] = {{1,2},{3,4},{7,8,9}};
- 动态初始化:
-
int a[][] = new int [3] [5]; int b[][] = new int [3][]; b[0] = new int [2]; b[1] = new int [3]; b[2] = new int [5];
-
5.二维数组举例
4.数组的拷贝
使用java.lang.system类的静态方法:
public static void arraycopy(object src,int srcpos,object dest,int destpos,int lenth)
- 可以同于数组src从第srcpos项元素开始的lenth个元素拷贝到目标数组从destpos项开始的length个位置
- 如果源数据数目超过目标数组边界会抛出indexoutofbpundsexception异常
- 需要注意的是,修改拷贝后的数组,源数组的值也会跟着改变,因为copy后的数组和源数组在内存空间指向的是同一地址,可以参考后面的例子来理解这句话
publicclass test {
public static void main(string[] args){ //一维数组的拷贝 string[] s = {"mircosoft","ibm","sun","oracle","apple"}; string[] sbak = new string[6]; system.arraycopy(s, 0, sbak, 0, s.length); for(int i=0;i<sbak.length;i++){ system.out.print(sbak[i]+" "); } system.out.println(); for(int i=0;i<s.length;i++){ system.out.print(s[i]+" "); } system.out.println(); //二维数组的拷贝 int [][] intarray = {{1,2},{1,2,3},{3,4}}; int [][] intarraybak = new int[3][]; system.arraycopy(intarray, 0, intarraybak, 0, intarray.length); intarraybak[2][1] = 100; for(int i = 0;i<intarray.length;i++) { for(int j=0;j<intarray[i].length;j++) { system.out.print(intarray[i][j]+" "); } system.out.println(); } } }
再看一个例子:
public class test {
public
static
void
main(string[] args) {
int
a[] = {
1
,
2
,
3
,
4
};
int
b[] = {
4
,
2
,
3
,
5
,
6
};
int
c[];
int
c1[];
//相当于数组扩充,观察c1和c2的输出来参考这个函数的使用方式
c = arrays.copyof(b, a.length + b.length);
c1 = arrays.copyof(a, a.length + b.length);
system.out.println(
"c = "
+ arrays.tostring(c));
system.out.println(
"c1 = "
+ arrays.tostring(c1));
//数组拷贝
system.arraycopy(b,
0
, c, a.length, b.length);
system.out.println(
"c = "
+ arrays.tostring(c));
system.out.println(
"a = "
+ arrays.tostring(a));
system.out.println(
"b = "