javaSE之数组

一、数组的基本概述

1、数组的概念

数组是相同或者相兼容的数据类型的变量的集合。在计算机的内存存储中是一组连续的空间,当中存放的变量称为元素,数组的下标索引[index]从0开始,最大为数组的长度(length)-1,使用数组名称.length可以获得数组的长度。

2、数组的定义方式

(1)数据类型 [] 数组的名称={值1,值2,值3};
int [] arr={1,2,3};
(2)数据类型 [] 数组的名称= new 数据类型[数组的长度length];
int [] arr=new int[5]; 长度可为0
左侧在栈空间开辟空间,右边在堆空间开辟空间,生成一个地址值,赋给了栈空间
指向同一个地址值的数组是同一个数组
== 判断变量是看其数值,判断数组是看其地址值
(3)数据类型 [] 数组的名称=new 数据类型[]{值1,值2,值3};(不常用) 右侧[]不可放数字
int [] arr=new int [] {1,2,3};
[]的存放问题
定义一个数组的时候,[]可以放到数据类型之后,也可以放到数组名称之后
定义多个数组时,[]存放在数据类型之后,表示所有变量共有,存放在变量名称之后,表示变量单独持有,一般放在数据类型之后
eg:int [] a,b; a是一维数组,b也是一维数组。
int a[],b; a是一维数组,b是一个int类型的变量。
int a[],b[]; a是一维数组,b也是一维数组。
int [] a[],b; a是二位数组,b是一维数组。

3、数组元素的访问

(1)单个元素的访问:数组的名称[index]
(2)全部元素的访问:确定范围用for,不确定用while循环,jdk1.5以后新增加了foreach循环
语法:
for (数据类型 临时变量的名称: 数组的名称|集合的名称 )
{
System.out.println(临时变量的名称);
}
案例:让数组元素进行反转。
int [] arr={1,2,3,4,5};
for (int i=0;i<arr.length/2 ;i++ )
{
int temp=arr[i];
arr[i]=arr[arr.length-1-i];
arr[arr.length-1-i]=temp;
}
for (int a:arr)
{
System.out.println(a);
}

4、数组元素的拷贝

(1)使用for循环,效率太低,基本不会使用
int [] a={1,2,3,4,5};
int [] b=new int[5];
for(int i=0;i<a.length;i++){
b[i]=a[i];
}
for(int m:b){
System.out.println(m);
}
(2)使用object类当中的clone()方法,有返回值
int [] b=a.clone();
(3)static void arraycopy(Object src, int srcPos, Object dest, int destPos, int length)
从指定源数组中复制一个数组,复制从指定的位置开始,到目标数组的指定位置结束。
参数1:原数组的名称
参数2:从哪儿开始复制,下标索引
参数3:目标数组的名称
参数4:在目标数组的哪个位置开始放拷贝的内容
参数5:copy数组的长度(拷贝几个)
System.arraycopy(a,2,b,1,3); 无返回值
(4)arrays工具类当中的copyOf()方法
int[] b=Arrays.copyOf(a,a.length);
System.out.println(Arrays.toString(b));
注:Arrays是数组的工具类,基本数据类型和引用类型均可使用 类名.方法名称 调用
常用方法
static String toString(int[] a) / toString(参数)
返回指定数组内容的字符串表示形式。 (直接输出数组元素)
例: System.out.println(Arrays.toString(arr));

static void sort(int[] a) / sort(数组) 无返回值,void 直接对原数组进行操作
对指定的 int 型数组按数字升序进行排序。

static boolean equals(int[] a, int[] a2) / euqals(参数1,参数2)
比较数组的内容、长度、元素内容、顺序都相等,即两个数组完全一样,则返回 true。

static int hashCode(int[] a) / hashCode(数组)返回一个int类型的哈希码
基于指定数组的内容返回哈希码。

static void fill(int[] a, int val) / fill(原数组,值) 数据的填充
将指定的 int 值分配给指定 int 型数组的每个元素。

static int[] copyOf(int[] original, int newLength) copyOf(源数组,新数组的长度,
复制指定的数组,截取或用 0 填充(如有必要),以使副本具有指定的长度。

static int[] copyOfRange(int[] original, int from, int to)
将指定数组的指定范围复制到一个新数组。

static List
返回一个受指定数组支持的固定大小的列表。

五、二维数组

1、定义

(1) 数据类型 [][] 数组的名称={{值1,值2,值3},{值1,值2},{值1,值2}};
int [][] arr={{1,2,3},{3},{2,9}};
(2) 数据类型[][] 数组的名称=new 数据类型[length][]; 锯齿型数组(给出外层一位数组长度)
int [][] arr2=new int[3][];
(3) 数据类型[][] 数组的名称=new 数据类型[length][length]; 规则的二维数组
int [][] arr3=new int[3][3];

**[][]的存放问题**
当只声明一个二维数组的时候,放在数据类型与变量名之后均可
当声明多个二维数组时,放在数据类型之后,表示多个变量共享
										放在变量名之后,表示变量单独持有
int [] a,b[];   a是一维数组,b也是二维数组。

在使用二维数组之前必须对其的一维数组进行开辟空间,然后一个一个赋值。

2、二维数组元素的访问

(1)单个元素的访问:
语法: 二维数组的名称[index][index];
(2)全部元素的访问: for循环的嵌套

	for (int i=0;i<arr.length ;i++ )//行
	{
		for (int j=0;j<arr[i].length ;j++ )//列
		{
			System.out.print(arr[i][j]+"  ");
		}
		System.out.println();
	}

案例:打印杨辉三角的前十行
int [][] arr=new int[10][10];
for(int i=0;i<arr.length;i++){//行
arr[i][0]=1;
arr[i][i]=1;
for(int j=1;j<i;j++){
arr[i][j]=arr[i-1][j]+arr[i-1][j-1];
}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值