数组(Java自我进阶笔记四)

数组

一级目录

二级目录

三级目录

一 数组概论

数组是具有相同数据类型的一组数据的集合。在Java语言中将数组看作一个对象。根据数组的维数
可以分为一维数组、二维数组。

二 一维数组的创建和使用

一维数组实质上是一组相同类型数据的线性集合。当需要处理或传递一组数据时,可以使用数组

2.1创建一维数组

数组作为对象允许使用new关键字进行内存分配。在使用数组前,必须首先定义数组变量所属
的类型
1先声明再分配内存

声明格式:

数组元素类型 数组名字[];
或者
数组元素类型 []数组名字;

声明完数组后需要分配内存,分配内存时需要指明数组的长度。
为数组分配内存空间的语法格式如下:

数组名字=new 数组元素的类型[数组元素的个数];

示例如下:

int arr;
arr=new int[5];
2 声明的同时为数组分配内存

语法如下:

数组元素的类型 数组名=new 数组元素的类型[数组元素的个数];

示例如下:

int arr[]=new int[5];

2.2 初始化一维数组

初始化有两种形式

int arr[]=new int[]{1,2,3,4,5};

int arr2[]={2,3,5,6};

{}中的内容为数组的元素,用“,”进行分割

2.3 使用一维数组(举例说明)

package shuzu;
import java.io.*;
public class GetDay {
	public static void main(String args[]) {
		int day[]=new int[] {31,28,31,30,31,30,31,31,30,31,30,31};//创建并初始化一维数组
		
		for(int i=1;i<=12;i++) {
			System.out.println(i+"月有"+day[i-1]+"天");
		}
	}

}

三 二维数组的创建和使用

二维数组可以看作元素是一个一维数组的一维数组。二维数组第一个下标代表行第二个代表元素
所在的列

3.1创建二维数组

1先声明再分配内存

声明格式:

数组元素类型 数组名字[][];
或者
数组元素类型 [][]数组名字;

声明完数组后需要分配内存,分配内存时需要指明数组的长度。
对于高维数组,有两种为数组分配内存空间的方式
1 为每一维数组分配内存

a=new int[2][4];

2分别为每一维分配空间

a=new int[2][];
a[0]=new int[2];
a[1]=new int[6]
2 声明的同时为数组分配内存

语法如下:

数据类型[][] 数组名 = new 数据类型[高维长度][低维长度];

示例如下:

int [][]a=new int[2][5];

3.2 初始化二维数组

语法如下:

数据类型 数组名称[][]={数组元素1,数组元素2...数组元素n}

示例如下:

int arr[][]={{2,3,4},{5,4,5,4,5,6}};

3.3 使用二维数组(举例说明)


package shuzu;
import java.io.*;
public class Matrix {
	public static void main(String args[]) {
		int a[][]=new int[3][4];
		for(int i=0;i<a.length;i++) {
			for(int j=0;j<a[i].length;j++)
			{
				System.out.print(a[i][j]);
			}
			System.out.println();
		}
	}

}

四 数组的基本操作

4.1 遍历数组

 使用数组的length属性得到数组长度,使用for循环依次遍历数组元素

遍历一维数组
示例如下:

package shuzu;
import java.io.*;
public class Trap1 {
	public static void main(String args[]) {
		int b[][]=new int[][] {{1},{2,3},{4,5,6}};
		for(int k=0;k<b.length;k++)
		{
			for(int j=0;j<b[k].length;j++)
			{
				System.out.print(b[k][j]);
			}
			System.out.println();
		}
	}

}

使用foreach遍历

package shuzu;
import java.io.*;
public class Tautog {
	public static void main(String args[]) {
		int arr2[][]= {{4,3},{1,2}};
		System.out.println("数组中的元素是:");
		int i=0;
		for(int x[]:arr2) {
			i++;
			int j=0;
			for(int e:x) {
				j++;
				if(i==arr2.length&&j==x.length) {
					System.out.print(e);
				}else
					System.out.print(e+"、");
			}
		}
	}

}

4.2填充替换数组元素

通过Arrays类的静态方法fill()来对数组中的元素进行替换

1 对指定数组全部替换
fill(数据类型[] 数组名称,替换的值)

int arr=new int[5];
Arrays.fill(arr,8);//这时arr数组中的元素全部变成了8

2 对数组指定位置进行替换
语法如下:

fill(数据类型[] 数组名称,替换初始位置,替换的末位置(不包括在内),替换的值);
如果替换的初始位置和末位置相同,则不进行替换
int arr[]=new int[]{45,1,2,10};
Arrays.fill(arr,1,2,8)//这时下标为一的元素的值被更换成8

4.3 对数组进行排序

通过Arrays类的静态sort()方法实现对数组的排序

语法如下:

Arrays.sort(数组名称);

示例如下:

int arr[]=new int[]{23,42,12,8};
Arrays.sort(arr);//对arr数组进行排序

注意排序是根据字典编排顺序进行排序的。因此数字在字母前,大写字母在小写字母前

4.4 复制数组

Arrays类的copyOf()方法与copyOfRange()方法可以实现对数组的复制

(1)copyOf()方法

复制数组到指定长度

语法如下:

Arrays.copyOf(数组名,新数组长度);//如果新数组长度大于被复制的数组的长度,
//如果是整型数组则填0,字符数组填null
int arr[]=new int[]{23,43,12};
int newarr[]=Arrays.copyOf(arr,5);//新数组长度为5,元素分别是23,43,12,0,0

(2)copyOfRange()方法

可将指定数组的指定长度复制到一个新数组

语法如下:

Arrays.copyOfRange(数组名称,开始复制的索引位置,结束复制的索引位置(最后索引位置不被复制))

示例如下:

int arr[]=new int[]{23,42,12,84,10};
int newarr[]=Arrays.copyOfRange(arr,0,3);//新数组长度为3,元素分别为23,42,12

4.5 数组查询

Arrays类的binarySearch()方法,使用二分搜索法来搜索指定数组,以获得指定对象,
返回索引值,其有两种参数类型

(1)binarySearch(Object a[],Object key)
语法如下:

binarySearch(Object[] a,Object key)

a:要搜索的数组
key:要搜索的值
当key在该数组中时,返回该搜索值的索引;否则返回-1或者“-”+插入点。插入点是第一个大于此键的元素索引
注意必须在调用之前对数组进行排序,否则查询的结果是没有意义的,如果有多个键值,则无法
示例如下:

int ia[]=new int[]{3,1,4,5,2,6};
Arrays.sort.(ia);
int index=Arrays.binarySearch(ia,4);//这时index的值是3
int index2=Arrays.binarySearch(ia,4.5);/**这时Index的值是-4,第一个大于4.5的值是5,它的索引是4,所以返回值是-4/

(2)binarySearch(Object [],int fromIndex,int toIndex,Obejct key)
语法如下:

binarySearch(Object a[],int fromIndex,int toIndex,Obejct key);

a:要搜索的数组
fromIndex:指定范围的开始从索引(包含)
toIndex:指定范围的结束处索引(不包含)
key:要搜索的元素
注意:使用该方法之前需要对该数组进行排序,来获得准确的索引值,如果元素key在指定的范围内,则返回该键值的索引值,否则返回-1或者“-”+插入点。如果key大于范围内的所有值则返回toIndex;如果指定的范围大于等于数组的长度,会报错。
示例如下:

package shuzu;
import java.io.*;
import java.util.Arrays;
import java.util.Arrays.*;
public class Rakel {
	public static void main(String args[]) {
		String str[]=new String[] {"ab","cd","ef","yz"};
		Arrays.sort(str);
		int index=Arrays.binarySearch(str, 0,2,"cd");
		System.out.println("cd的索引位置是:"+index);
	}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值