一、数组的定义
两种定义方式,以整型数组为例,同一数组只能存放同一种类型的数据
int demo01[] = new int[3];
int demo02[] = {1,2,3};
需要注意的是,数组定义一定要实例化,不然会发生异常:空指针异常NullPointerException
二、数组的使用
利用下标调用数组
int data[] = null;
data = new int[3];
data[0] = 10;
data[1] = 20;
data[2] = 30;
在使用下标时,可能会触发生异常:数组下标越界异常ArrayIndexOutOfBoundsException
通常我们在遍历数组时,用 增强for循环 会更方便一些。
三、二维数组
与一维数组的定义与使用相类似
int demo01[][] = new int[3][2];
int demo02[][] = {{1,2,3},{4,5,6}};
int data[][] = null;
data = new int[3][4];
data[0][1] = 10;
data[0][2] = 20;
data[1][2] = 30;
四、Arrays工具类
一些常用的方法有:
方法 | 用途 |
---|---|
fill | 填充数组 |
sort | 排序(从小到大,字母先大写后小写) |
toString | 转成字符串类型,用[]框起来,用逗号分隔 |
equals | 比较两个数组是否看上去完全一样 |
binarySearch | 二分法找已排序数组指定元素的索引值 |
copeOfRange | 截取数组的某一段 |
举几个例子:
int[] arr = new int[5];
Arrays.fill(arr,4);//给所有值赋值4
String str = Arrays.toString(arr);
System.out.print(str);
输出:[4,4,4,4,4]
int demo[] = {3,1,2,4,5};
Arrays.sort(demo);
String str = Arrays.toString(demo);
System.out.println(str);
输出:[1,2,3,4,5]
int demo[] = {3,1,2,4,5};
int demo2[] = {1,2,3,4,5};
boolean equals = Arrays.equals(demo, demo2);//顺序不一样
System.out.println(equals);
输出:false
int demo[] = {1,2,3,4,5};
int demo2[] = Arrays.copyOfRange(demo,1,3);
int index = Arrays.binarySearch(demo,3);
String s = Arrays.toString(demo2);
System.out.println(s);
System.out.println(index);
输出:[2,3]
2
五、排序算法
1、冒泡排序
排序原理:数组元素两两比较,交换位置,大元素往后放,那么经过一轮比较后,最大的元素就会出现在最大索引处。
int arr[] = {24,69,80,57,13};//待排序数组
for(int i=0;i<arr.length;i++){
for(int j=0;j<arr.length-i-1;j++){
if(arr[j]>arr[j+1]){
int temp = arr[j];
arr[j] = arr[j+1];
arr[j+1] = temp;
}
}
}
String str = Arrays.toString(arr);
System.out.println(str);
输出:[13, 24, 57, 69, 80]
2、选择排序
排序原理:从0索引处开始,依次和后面的元素进行比较,小的元素往前放,经过一轮比较后,最小的元素就出现在了最小索引处。
int[] arr = {24,69,80,57,13};//待排序数组
for(int i=0;i<arr.length-1;i++){
for(int j=i+1;j<arr.length;j++){
if(arr[i]>arr[j]){
int temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
}
}
String str = Arrays.toString(arr);
System.out.println(str);
输出:[13, 24, 57, 69, 80]
3、插入排序
排序原理:将一个记录插入到一个长度为m的有序表中,使之仍保持有序。
int arr[] = {24,69,80,57,13};//待排序数组
for(int i=1;i<arr.length;i++){
int j = i;
while(j>0 && arr[j]<arr[j-1]){
int temp = arr[j];
arr[j] = arr[j-1];
arr[j-1] = temp;
j--;
}
}
String str = Arrays.toString(arr);
System.out.println(str);
输出:[13, 24, 57, 69, 80]
4、希尔排序
排序原理:选取合适的增量,进行比较,一轮过后,数组会趋向有序,再不断减小增量进行插入排序,直至增量为1。
可以理解为通过增量分组进行插入排序,降低了时间复杂度。
5、快速排序
排序原理:在数组中选择一个基准数,小的放到左边,大的放到右边。第一轮之后,分别在两个区域多次重复上述操作。
6、归并排序
排序原理:把数组看成有n个长度为1的子序列,然后两两归并,变成n/2个长度为2的子序列,如此重复,最后归并成1个长度为n的序列。
7、基数排序
排序原理:分配再收集最大数位数次,先定义0-9(10个)临时“桶,”分配是指从个位开始每一轮按更高一位的值将数据到分配到对应的“桶中,收集指将数据从桶中按顺序收集回数组中。
确定一个数是几位数:
在java.util.Arrays包下
String.valueOf(那个数).length();
如果这是个浮点数,得出的结果是位数+1,因为小数点算1位。