数组,以及Arrays.方法的使用

数组

创建数组的时候,要指明数组的长度。

1
2
3
4
5
6
7
8
9
10
11
int a [ ] = new int[5] ; //分配了长度是5的数组,但是没有赋值
a[4]=100; //下标4,实质上是“第5个”,即最后一个
a[5]=101; //下标5,实质上是“第6个”,超出范围 ,产生数组下标越界异

int[] a = new int[]{100,102,444,836,3236};//写法一: 分配空间同时赋值
int[] b = {100,102,444,836,3236};//写法二: 省略了new int[],效果一样

//写法三:同时分配空间,和指定内容
//在这个例子里,长度是3,内容是5个,产生矛盾了
//所以如果指定了数组的内容,就不能同时设置数组的长度
int[] c = new int[3]{100,102,444,836,3236};

引用概念:

如果变量代表一个数组,比如a,我们把a叫做引用
与基本类型不同

1
2
3
4
5
int c = 5; 这叫给c赋值为5 
声明一个引用 int[] a;
a = new int[5];
让a这个引用,指向数组

数组排序

选择法排序

1
2
3
4
5
6
7
8
9
10
for (int j = 0; j < a.length-1; j++) {//外层循环一次,
因为最后一次剩下的就是最大的所以循环次数-1
for (int i = j+1; i < a.length; i++) {//内层会全部循环一次
if(a[i]<a[j]){ //如果然后的数小于前面的就换位
int temp = a[j];
a[j] = a[i];
a[i] = temp;
}
}
}

冒泡法排序

1
2
3
4
5
6
7
8
9
10
for (int j = 0; j < a.length; j++) {//
for (int i = 0; i < a.length-j-1; i++) {//-1防止数组下标越界
//-j是因为每内循环一次,最大的就放在后面了,就不需要比较了
if(a[i]>a[i+1]){ //如果前面的大于后面的就互换
int temp = a[i];
a[i] = a[i+1];
a[i+1] = temp;
}
}
}

增强型for循环遍历

1
2
3
4
int [] values = new int[];
for (int each : values) {
System.out.println(each);
}

复制数组:

把一个数组的值,复制到另一个数组中
System.arraycopy(src, srcPos, dest, destPos, length)
src: 源数组
srcPos: 从源数组复制数据的起始位置
dest: 目标数组
destPos: 复制到目标数组的起始位置
length: 复制的长度

这是一个二维数组,里面的每一个元素,都是一个一维数组
所以二维数组又叫数组的数组
int b[][] = new int[][]{
{1,2,3},
{4,5,6},
{7,8,9}
};

Arrays

Arrays是针对数组的工具类,可以进行 排序,查找,复制填充等功能。 大大提高了开发人员的工作效率。

copyOfRange 数组复制

与使用System.arraycopy进行数组复制类似的,Arrays提供了一个copyOfRange方法进行数组复制。
// copyOfRange(int[] original, int from, int to)
// 第一个参数表示源数组
// 第二个参数表示开始位置(取得到)
// 第三个参数表示结束位置(取不到)

toString() 转换为字符串

//int a[] = new int[] { 18, 62, 68, 82, 65, 9 };
//String content = Arrays.toString(a);
sort 排序
在前面章节学习了 选择法排序 和 冒泡法排序,Arrays工具类提供了一个sort方法,只需要一行代码即可完成排序功能。

Arrays.sort(a);

binarySearch 搜索
//使用binarySearch之前,必须先使用sort进行排序
//如果数组中有多个相同的元素,查找的结果是不确定的
int a[] = new int[] { 18, 62, 68, 82, 65, 9 };
Arrays.sort(a);
System.out.println(“数字 62出现的位置:”+Arrays.binarySearch(a, 62));

equals 判断是否相同

//比较两个数组的内容是否一样
System.out.println(Arrays.equals(a, b));

fill 填充

//使用同一个值,填充整个数组
int a[] = new int[10];
Arrays.fill(a, 5);

练习题

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
import java.util.Arrays;

/*
* 练习-二维数组排序
* 首先定义一个5*8的二维数组,然后使用随机数填充满
* 借助Arrays的方法对二维数组进行排序
*/
public class Exercise_TwoDimensionSort {
public static void main(String[] args) {
int a[][] = new int[5][8];
int []b = new int [40];//这里必须赋值
// int b = (int)(Math.random()*100);
// Arrays.fill(a, b); 二维不能填充;
System.out.println("排序前:");
for (int i = 0; i <5; i++) {
for (int j = 0; j <8; j++) {
a[i][j] =(int)(Math.random()*100);//给二维数组赋值;
System.out.print(+a[i][j]+"\t");
}
System.out.println();
}
for (int i = 0; i <5; i++) {

System.arraycopy(a[i], 0, b, i*8, a[i].length);

}
Arrays.sort(b);
System.out.println("排序后:"+Arrays.toString(b));
for (int i = 0; i < 5; i++) {
System.arraycopy(b, i*8, a[i],0,8);
}

System.out.println("新的二维数组:");
for (int i = 0; i <5; i++) {
for (int j = 0; j < 8; j++) {
System.out.print(a[i][j]+"\t");
}
System.out.println();
}
}
}

原文来源