java array工具类_第3篇 Java中的数组及Array工具类

数组

1、数组的几个重要特征

连续存储空间(方便查找)

数组长度固定(灵活性差)

数组中只能存放相同的数据类型

数组下标从0开始计算

2、数组的声明定义

//定义int型数组ary0并声明长度为4

int ary0[] = new int[4];//定义int型数组ary1同时赋初始值

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

在上面对两个数组的定义中:赋值运算左边为对数组的定义,包括有数组类型、数组名;赋值运算右边为对数组开辟相应数据类型、对应长度的内存空间。

3、数组的遍历

通过ary0.length可以获取数组的长度

int ary0[] = new int[10];//以数组长度为边界,根据下标对应赋值

for (int i = 0; i < ary0.length; i++) {

ary0[i]=i;

}//加强for循环,i依次指向数组每个元素,打印输出

for (inti : ary0) {

System.out.println("ary0中第"+i+"个元素:"+ary0[i]);

}

输出结果为:

ary0中第0个元素:0ary0中第1个元素:1ary0中第2个元素:2ary0中第3个元素:3ary0中第4个元素:4ary0中第5个元素:5ary0中第6个元素:6ary0中第7个元素:7ary0中第8个元素:8ary0中第9个元素:9

Arrays工具类

Arrays类为java.util包里的一个工具类,提供对数组的一些操作方法,常用的有排序(sort)、填充(fill)、拷贝(copyOf)、查找(binarySearch)、判断相等(equals)等

1、排序(sort)

Arrays.sort() 支持的类型有char、double、int、byte、float等,同时还支持泛型,但需要自己实现Comparator接口

int ary1[] = new int[]{5,23,15,33,24,6,79,19};//使用Arrys.sort()对ary1进行从小到大排序

Arrays.sort(ary1);for (inti : ary1) {

System.out.print(i+" ");

}

打印结果为:

5 6 15 19 23 24 33 79

2、填充(fill)

将数组所有元素赋值为统一的填充值,如果对应元素已经有值了,则将覆盖原来的值

//Arrays.fill(int[] a, int val) 的实现:

public static void fill(int[] a, intval) {for (int i = 0, len = a.length; i < len; i++)

a[i]=val;

}

对数组ary2进行填充,将所有元素填充为9:

int ary2[] = new int[10];

Arrays.fill(ary2,9);for (inti : ary2) {

System.out.print(i+" ");

}

最后填充所得到的结果为:

9 9 9 9 9 9 9 9 9 9

3、拷贝(copyOf)

参数:

int[] original:被拷贝的数组

int newLength:被拷贝的长度,即original中被拷贝元素的长度

Arrays.copyOf() 函数会返回一个全新的数组,数组中的元素依次被赋值为orignal数组中前n个元素的值,n即被拷贝的长度,当n大于original数组的长度时,可用来对数组长度进行扩展,扩展部分元素值为0

int ary0[] = new int[]{1,2,3,4,5,6};intary1[];//将ary0前三个元素拷贝给ary1

ary1 = Arrays.copyOf(ary0, 3);//打印ary1的长度与元素值

System.out.println(ary1.length);for (inti : ary1) {

System.out.print(i+" ");

}

打印结果为:

3

1 2 3

表明ary0中前3个元素【1,2,3】被复制给了一块新的内存空间,同时ary1指向该空间:

640048976557f02c0109c36648d9cbb6.gif

4、二分查找(binarySearch)

使用二分查找时,必须先将数组排序

一般用在查找元素是否存在

如果数组没有排序,结果无法确定

如果包含多个指定值,无法保证找到的是哪一个,如果找不到,则返回负数

int ary0[] = new int[]{1,2,5,4,3,6};//对ary0中3这个元素进行查找

int index = Arrays.binarySearch(ary0, 3);

System.out.println("未排序的数组为:");

showAry(ary0);

System.out.println("未排序进行查找结果:"+index);//对ary0进行排序,再次查找

Arrays.sort(ary0);

System.out.println("排序的数组为:");

showAry(ary0);

index= Arrays.binarySearch(ary0, 3);

System.out.println("排序后进行查找结果:"+index);//ary0指向新的、存在多个相同元素数组

ary0 = new int[]{1,2,3,4,5,2,6,3,8};//再次进行查找

Arrays.sort(ary0);

System.out.println("多值相同且排序过的数组:");

showAry(ary0);

index= Arrays.binarySearch(ary0, 3);

System.out.println("多值相同进行查找结果:"+index);

打印结果为:

未排序的数组为:

1 2 5 4 3 6

未排序进行查找结果:-3

排序的数组为:

1 2 3 4 5 6

排序后进行查找结果:2

多值相同且排序过的数组:

1 2 2 3 3 4 5 6 8

多值相同进行查找结果:4

5、判断相等(equals)

使用Arrays.equals() 判断相等时,进行的是数组各元素的值的比对,而非对ary0和ary1所指向地址的比对,具体实现如下:

public static boolean equals(int[] a, int[] a2) {if (a==a2)return true;if (a==null || a2==null)return false;int length =a.length;if (a2.length !=length)return false;for (int i=0; i

}

区别如下:

int ary0[] = new int[]{1,2,3,4,5};int ary1[] = new int[]{1,2,3,4,5};//根据地址判断相等

System.out.println(ary0==ary1);//根据值判断相等

System.out.println(Arrays.equals(ary0, ary1));

所得打印结果为:

false

true

在这里要注意不要将其与object类下的equals()方法搞混了,因为object类的equals方法本质上还是使用的 ”==“ 比较运算符,所以所得结果还将是false

最后是一些练习

将数组 ary0={1,2,3,4,5}、ary1={6,7,8,9,10} 整合成一个新的数组并打印

int ary0[] = new int[]{1,2,3,4,5};int ary1[] = new int[]{6,7,8,9,10};//先将ary0拷贝进ary2,数组长度为两数组长度之和

int []ary2 = Arrays.copyOf(ary0,ary0.length+ary1.length);//打印ary2

showAry(ary2);//再将ary1中元素通过赋值的方法依次拷贝

for (int i = 0; i < ary1.length; i++) {

ary2[i+ary0.length] =ary1[i];

}//得到最后结果,打印ary2

showAry(ary2);

得到打印结果如下:

1 2 3 4 5 0 0 0 0 0

1 2 3 4 5 6 7 8 9 10

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值