java---数组

什么是数组

程序=算法+数据结构
算法:解决问题的流程/步骤
数据结构:将数据按照某种特定的结构来保存。

  1. 数组是最基本的一种数据结构
  2. 数组是一种数据类型(引用类型)
  3. 数组也是对象
  4. 数组对象在堆中存储,数组变量属于引用类型。存储数组对象的地址信息。指向数组对象,数组的元素可以看做成员变量只不过类型全都相同。
  5. 元素按照线性顺序排列,所谓线性顺序是指除第一个元素外,每一个元素都有唯一的前驱元素。除最后一个元素外,每一个元素都有唯一的后继元素。
  6. 元素只能通过下标访问。每一个数组下标都是从0开始最大到 元素–1(length-1)结束。
int [] a = new int [6];

声明int型数组a,包含了6个元素
每个元素的类型都是int,默认值为0
在这里插入图片描述
int型数组默认值为0。最大下标 为a.length-1

  • 声明数组语法
    数据类型[] 变量名 = new 数据类型[元素];
    例: int[] a = new int[5];
    声明数组时不规定数组长度,new关键字分配空间时需指定分配的空间大小
  • 初始化数组
int [] arr =new int[3]; //0,0,0
int [] arr ={1,3,5,7};//1,3,5,7
int [] arr = new int[] {1,4,6};//1,4,6 []里不能再写值
int [] arr;
arr={1,3,5};//编译错误
arr = new int [] {1,3,5};//正确
  • 数组的访问
    通过数组.length可以获取数组的长度
int [] arr = new int[3];
System.out.println(arr.length);//输出结果:3
arr[0] = 100;
arr[1] =200;
arr[2] = 300;
arr[3] =400;//编译没错,一旦运行就会报 数组下标越界异常
System.out.println(arr[arr.length-1]);//输出最后一个元素的值
  • 数组的遍历
int [] arr=new int[10];
for(int i = 0;i<arr.length;i++){
arr[i]=100;//10个元素的值都赋值为100
System.out.println(arr[i]);//输出每个元素的值
}

  • 数组的复制
    System.out.arraycopy 方法用于数组复制
    System.arraycopy(src, srcPos, dest, destPos, length);
    src:源数组
    srcPos:源数组起始位置
    dest:目标数组
    destPso:目标数组起始位置
    length:要复制的数组元素的数量。
int[] arr = new int [10];
int[] arr2 = {10,15,13,123,5};
System.arraycopy(arr2,0,arr,0,arr2.length);
//arr2下标0开始复制到arr,从arr下标0开始,复制5个元素。
  • Arrays.copyOf方法复制数组
    使用java.util.Arrays类copyOf方法可以实现数组的复制以及扩容。
    语法:
int[] arr = new int [10];
int[] arr2 = new int[] {5,1,5,3,4,8};
arr = Arrays.copyOf(arr2, arr2.length);

//输出结果: 5,1,5,3,4,8
arr = Arrays.copyOf(original, newLength);
arr:目标数组
original:源数组
newlength:要复制的元素数量,大于目标数组的时候 用0或者null进行填充。小于目标数组的时候就会进行截取。

  • Arrays.copyOf进行数组扩容
int[] arr = new int[10];
arr = Arrays.copyOf(arr,arr.length+1);
System.out.println(arr.length);

输出结果:11,
可以用此方法对数组进行扩容。这不是在原数组进行扩容,而是一个新的数组,数组的长度在创建后是不可改变的,所谓的扩容是指创建一个更大的新数组,并将原有数组的内容复制到其中。

  • 数组的排序
    所谓排序就是指将数组元素中的值 有大到小,或者由小到大 按一定顺序进行排列。对元素较多的数组,排序算法的优劣至关重要。
    常用的排序算法有:插入排序,冒泡排序,快速排序等。
    Arrays.sort方法用于数组从小到大升序 排序效率最高,耗时最少
public static  void main (String  [] args) {
		int[] arr=new int[1000];
		for(int i =0;i<arr.length;i++) {
			arr[i]=(int)(Math.random()*100);
			
		}
		long cc = System.currentTimeMillis();
		-----------------------------------------------------------------------------------
		//冒泡排序耗时:10
		for(int a=0;a<arr.length-1;a++) {
			for(int j=0;j<arr.length-1-a;j++) {
				if(arr[j]<arr[j+1]) {
					int t;
					t=arr[j];
					arr[j]=arr[j+1];
					arr[j+1]=t;
				}
			}
		}
		-------------------------------------------------------------------------------------
		Arrays.sort(arr);//  arrays.sort排序耗时:1
		-------------------------------------------------------------------------------------
		long dd = System.currentTimeMillis();
		System.out.println(Arrays.toString(arr));
		System.out.println("耗时"+(dd-cc));

	}

输出结果:[3, 5, 10, 46, 48, 345]

  • 冒泡排序
public static  void main (String  [] args) {
		//冒泡排序
		int[] arr=new int[] {10,5,3,46,48,345};
		for(int i=0;i<arr.length-1;i++) {
			for(int j = 0;j<arr.length-1-i;j++) {
				if(arr[j]<arr[j+1]) {
					int t ;
					t=arr[j];
					arr[j]=arr[j+1];
					arr[j+1]=t;
				}
			}
		}
		System.out.println(Arrays.toString(arr));

	}
  • Arrays.toString数组格式化输出

例:

int[] arr = {10,20,31,1323,32};
System.out.println(Arrays.toString(arr));
//输出结果 [10, 20, 31,1323,32]

二维数组

初始化二维数组:

int[][] test =new int [4][5];
//初始化了一个test数组类型数组。包含4个元素,每个元素都是int[]型。默认值为null
//每个int[] 数组 包含了5个元素,每个元素都是int。默认值为0
		for(int i=0;i<test.length;i++) {
			for(int j=0;j<test[i].length;j++) {
				test[i][j]=100;
				System.out.print("test["+i+"]["+j+"]="+test[i][j]+"\t");
			}
			System.out.println();
		}
		
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值