Java6

1.9 数组

1.9.1 数组定义与初始化
int[] arrr = {1,2,4};
int[] arrr1 = new int[5];//如果没有复值,就会用默认值
int[] arrr2 = new int[] {4,7,8,9};
int[] arr4 = arrr2;
1.9.2 匿名数组

匿名数组是一种特殊的数组创建方式,它允许你在不事先定义数组变量的情况下直接创建并使用数组。也就是说,你可以直接在需要数组的地方创建它,而不用专门声明一个数组变量来存储它。Java 允许数组长度为0。通过匿名数组这种语法可以创建一个长度为0的数组。数组长度为0和null不同。

语法:

new 数据类型[]{元素1, 元素2, ...};
//创建一个长度为0的数组
new elementType[0];
示例:
  • 作为方法参数传递
在调用方法时,若该方法的参数为数组类型,你可以直接使用匿名数组作为参数传入。
public class AnonymousArrayExample {
    public static void printArray(int[] array) {
        for (int num : array) {
            System.out.print(num + " ");
        }
        System.out.println();
    }

    public static void main(String[] args) {
        // 直接使用匿名数组作为参数传递给printArray方法
        printArray(new int[]{1, 2, 3, 4, 5});
    }
}
在这个例子中,printArray方法接收一个int类型的数组作为参数。在main方法里,我们没有定义数组变量,而是直接创建了一个匿名数组new int[]{1, 2, 3, 4, 5}并将其传递给printArray方法。
  • 初始化其他数组
你也可以使用匿名数组来初始化另一个数组。
int[] numbers = new int[]{10, 20, 30, 40, 50};

这里的 new int[]{10, 20, 30, 40, 50} 虽然本质上是匿名数组,但它被赋值给了变量 numbers。一旦赋值给了变量,在后续代码里我们更多是通过变量 numbers 来引用这个数组,而非直接使用这个匿名数组的形式。一般来说,在赋值语句中,等号右边以 new 数据类型[]{元素列表} 这种形式出现且没有预先定义变量名的就是匿名数组。但是,当它被赋值给一个变量后,我们通常就借助该变量来使用这个数组了。

1.9.3 数组拷贝

拷贝分为浅拷贝和深拷贝。

浅拷贝:指向相同。

深拷贝:自己会重新开辟一块空间,把对方的值拷贝一份在自己空间,即只有值相同。

int[] arrr = {1,2,4};
int[] arrr1 = new int[5];//如果没有赋值,就会用默认值
int[] arrr2 = new int[] {4,7,8,9};

//浅拷贝
int[] arr4 = arrr2;
arr4[0] = 1000;//因为指向相同,都指向同一个数组,所以修改0位置的数,打印出来显示两数组里0位置的数都改了
System.out.println(Arrays.toString(arrr2));
System.out.println(Arrays.toString(arr4));
		
//深拷贝
//手动
int[] arr5 = new int[arrr2.length];
for(int i=0;i<arrr2.length;i++) {
	arr5[i] = arrr2[i];
}
arr5[0]=525;//修改arr5[0]的值不会修改arrr2[0]的值,因为是两个不同的空间
System.out.println(Arrays.toString(arrr2));
System.out.println(Arrays.toString(arr5));
//使用Arrays里的方法  		
//长度随意,多了的就按默认值,少了就只拷最前面的值
int[] arr6 = Arrays.copyOf(arrr2, 10);
arr6[0] = 8989;//修改arr6[0]的值不会修改arrr2[0]的值,因为是两个不同的空间
System.out.println(Arrays.toString(arrr2));
System.out.println(Arrays.toString(arr6));

注:Java无指针运算,不可以通过数组名+1,访问下一个值。

1.9.4 命令行参数
main方法中的String[] args会接收一个字符串数组,也就是命令行参数。
1.9.5 数组排序

使用Arrays类中的sort方法,可以对数值型数组进行排序。默认升序。

package com.qcby.第三章基础;

public class Person {
	int age;
	int height;
	String name;
	
	public Person(int a,int b,String c) {
		age = a;
		height = b;
		name = c;
	}
	//如不重写toString,打印的就是Object类的toString
	//Arrays.toString(arr4)会以数组的形式打印,但是数组里面元素怎么打印,要看该元素的toString方法
	@Override
	public String toString() {
		return "Person [age=" + age + ", height=" + height + ", name=" + name + "]";
	}
	
}
//sort默认升序
int[] arr = {10,1,7,2,4};
Arrays.sort(arr);
System.out.println(Arrays.toString(arr));

//通过多加参数,变降序,一共有两种方法,两种结果都一样
Integer[] arr2 = {10,1,7,2,4};
Arrays.sort(arr2,(a,b)->b-a);
//Arrays.sort(arr2,Collections.reverseOrder());
System.out.println(Arrays.toString(arr2));
		
//字符按照ASCII码排 sort默认升序
String[] arr3 = {"acc","bac","bbx","acbd","sza"};
Arrays.sort(arr3);
System.out.println(Arrays.toString(arr3));
		
Person x1 = new Person(20,168,"李华");
Person x2 = new Person(19,185,"赵雨");
Person x3 = new Person(24,178,"周叶");
Person[] arr4 = {x1,x2,x3};
Arrays.sort(arr4,(a,b)->b.height-a.height);//其他属性依次类推,降序
System.out.println(Arrays.toString(arr4));
Arrays.sort(arr4,(a,b)->a.height-b.height);//升序
System.out.println(Arrays.toString(arr4));

一些方法

java.util.Arrays 1.2

tatic String toString(type[] a) 5.0

返回包含a中数据元素的字符串,这些数据元素被放在括号内,并用逗号分隔。参数a的类型为int、long、short、char、byte、boolean、float或double的数组。

static type copy0f(type[] a, int length) 6

static type copyOfRange(type[] a,int start, int end) 6

返回与a类型相同的一个数组,其长度为length或者end-start,数组元素为a的值。

参数:

a 的类型为int、long、short、char、byte、boolean、float或double的数组。

start 为起始下标(包含这个值)。

end 为终止下标(不包含这个值)。这个值可能大于a.length。在这种情况下,结果为0或false。

length 为拷贝的数据元素长度。如果length值大于a.length,结果为 0 或false;否则,数组中只有前面length个数据元素的拷贝值。

static void sort(type[] a)

采用优化的快速排序算法对数组进行排序。

参数:

a 的类型为int、long、short、char、byte、boolean、float 或double的数组。

static int binarySearch(type[] a,type v)

static int binarySearch(type[] a,int start, int end, type v) 6

参数:

a 的类型为int、long、short、char、byte、boolean、float或double的有序数组。

start 为起始下标(包含这个值)。

end 为终止下标(不包含这个值)。

v 为同a的数据元素类型相同的值。

static voidfill(type[] a,type v)

将数组的所有数据元素值设置为v。

参数:

a 为类型为int、long、short、char、byte、boolean、float或double的数组。

v 为与a数据元素类型相同的一个值。

static boolean equals(type[]a,type[] b)

如果两个数组大小相同,并且下标相同的元素都对应相等,返回true。

参数:

a 和 b 类型为int、long、short、char、byte、boolean、float或double的两个数组。

1.9.6 多维数组
int[][] arr= {{1,2},{7,6},{18,9}};
int[][] arr2 = new int[3][2];//3个一维数组,每个一维数组有2个数
int[][][] arr5 = {{{1,89},{1,2}},{{3,4},{5,7}}};
1.9.7 不规则数组

数组的每一行有不同的长度。Java实际上没有多维数组,只有一维数组,多维数组被解释为“数组的数组”。

int[][] arr= {{1,2},{7,4,6},{1,8,9}};
int[][] arr2 = new int[3][2];//3个一维数组,每个一维数组有2个数
arr2[1] = new int[] {4,8,9,10};
		
String[][] arr3 = {{"aa","bb"},{"cc",new String("dd")},{new String("ee")}};
		
arr3[0] = new String[] {"xxxx"};
arr3[2][0] = new String("yyyyy");
		
Person x1 = new Person();
Person x2 = new Person();
Person[][] arr4 = {{x1,x2},{new Person()}};
		
int[][][] arr5 = {{{1},{1,2}},{{3,4},{5}}};

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值