JAVA-数组

JAVA笔记–数组

数组是由相同类型的若干项组成的一个数据集合,数组中的每个数据称为元素。

数组声明格式如下:
数据类型[] 标识符 推荐使用

或者

数据类型 标识符[]

一维数组
1、一维数组定义和初始化
int[] arr = new int[]{1,3,5,7,9};

或者

int[] arr = {1,3,5,7,9};

备注这两种方法之间没有任何区别。

public class ZachIntArray{
	public static int[] arr1 = new int[]{1,3,5,7};
	public static int[] arr2 = {2,4,6,8};
	
	public static void main(String[] args)
	{
		int i = 0;
		for(i = 0;i < arr1.length;i++){
			System.out.println(arr1[i] + "|" + arr2[i]);
		}
	}
}

注意:
在给数组分配内存空间时,必须指定数组能够存储的元素来确定数组大小。创建数组之后不能修改数组的大小,可以使用length属性获取数组的大小。

2、数组作为函数的形参

class ChangeIt{
	static void doIt(int[] z)
	{
		z = null;
	}
}

public class ZachArray{
	public static void main(String[] args){
		int[] zachArray = {1,2,3,4,5};
		ChangeIt.doIt(zachArray);
		
		int i = 0;
		for(i = 0; i < zachArray.length;i++){
			System.out.print(zachArray[i] + " ");
		}
		System.out.println();
	}
}

输出结果:
1 2 3 4 5

1、需要注意上面函数参数;
2、需要注意循环体重打印,加字符和加字符串的区别(单引号和双引号),结果会截然不同。
3、java基本数据类型传递参数时是值传递;引用类型传递参数是引用传递。然而数组对象虽然是引用传递,但是将引用z=null,只是将引用z不指向任何对象,并不会对原先指向的对象数据进行修改。

二维数组
1、二维数组的定义和初始化
int[][] array = {{1,2,3},{4,5,6}};

int[][] array = new int[][]{{1,2,3},{4,5,6}};//数组的个数由后面初始化的实体给出

几种错误的声明方式:
1、Cannot define dimension expressions when an array initializer is provided

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

错误原因:在声明的时候,不允许同时定义数组大小。
修改方案:int[][] myArray2 = new int[][]{{1,2,3},{4,5,6}};

2、Array constants can only be used in initializers

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

错误原因:一次性赋值必须在数组定义的时候赋值,如错误一。
修改方案:

int[][] myArray3 = new int[2][3];
for(int ii = 0;ii < myArray.length;ii++){
	for(int jj = 0;jj < myArray[0].length;jj++){
		myArray3[i][j] = myArray2[i][j];
	}
}

数组的使用:
1、遍历数组
方法一

int[][] myArray = {{1,2,3},{4,5,6}};
		int i = 0,j = 0;
		for(i = 0;i < myArray.length;i++){
			for(j = 0;j < myArray[0].length;j++){
				System.out.print(myArray[i][j] + " ");
			}
			System.out.println();
		}

方法二

for(int[]x : myArray){
	for(int z: x){
		System.out.print(z + " ");
	}
	System.out.println();
}

2、fill方法
原型:
fill(int[]a, int value)
fill(int[]a, int fromIndex, int toIndex, int value)//include fromIndex, exclude toIndex
该方法可将指定的int值value分配给int型数组。

import java.util.Arrays;

public class ZachFill{
	static void printIntArray(int[] a)
	{
		for(int i : a){
			System.out.print(i + " ");
		}
		System.out.println();
		System.out.println("--------------");
	}
	
	public static void main(String[] args)
	{
		int[] myArray = new int[]{1,3,5};
		printIntArray(myArray);
		Arrays.fill(myArray,9);
		printIntArray(myArray);
	}
}

3.sort方法
原型:
Array.sort(object);

public class ZachArray {

	static void printIntArray(int[] a)
	{
		for(int i = 0;i < a.length;i++){
			System.out.print(a[i] + " ");
		}
		System.out.println();
	}
	
	public static void main(String[] args)
	{
		int[] myArray = new int[]{23,14,27,48,31,20};
		System.out.println("After Sort");
		printIntArray(myArray);
		
		Arrays.sort(myArray);
		System.out.println("After Sort");
		printIntArray(myArray);
	}
}

4、数组复制 copy方法
原型:
copyOf(arr, int newArrayLength);
arr:要复制的数组,newArrayLength:新数组长度。

copyOfRange(arr,int fromIndex, int toIndex);
arr:要复制的数组,fromIndex:指定开始复制的下标(含),toIndex:指定结束复制的下标(不含)。

import java.util.Arrays;

public class ArrayCopy {
	static void printIntArray(int[] z)
	{
		for(int x : z){
			System.out.print(x);
		}
		System.out.println();
	}
	
	public static void main(String[] args)
	{
		int[] myArray = new int[]{1,3,5,7,9,2,4,6,8};
		System.out.println("print myArray:");
		printIntArray(myArray);
		
		int[] copyMyArray = Arrays.copyOf(myArray,myArray.length);
		System.out.println("print copyMyArray:");
		printIntArray(myArray);
		
		int[] partCopyMyArray = Arrays.copyOfRange(myArray, 1, 4);
		System.out.println("print partCopyArray:");
		printIntArray(partCopyMyArray);
	}
}

数组排序
1、冒泡排序

class BubbleSort{
	void printIntArray(int[] arr)
	{
		for(int x : arr){
			System.out.print(x + " ");
		}
		System.out.println();
	}
	
	void sort(int[] arr)
	{
		int temp = 0;
		for(int i = 1;i < arr.length;i++){
			for(int j = 0;j < arr.length - i;j++){
				if(arr[j] > arr[j + 1]){
					temp = arr[j];
					arr[j] = arr[j + 1];
					arr[j + 1] = temp;
				}
			}
		}
	}
}

2、直接排序
3、反转排序

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值