4.Arrays
学习Arrays前先学一下了解冒泡排序
4.1冒泡排序
要想知道什么是冒泡排序首先得知道什么是排序
排序:将一组数据按照固定的规则进行排列
例如:123456它们就是按照从小到大的规则排列好的数据
冒泡排序:一种排序的方式,对要进行排序的数据中相邻的数据进行两两比较,将较大的数据放在后面,一次对所有数据进行操作,直至所有数据按要求完成排序。
使用一个场景演示冒泡排序的规则:
这里有五个人,它们的身高163.171.130.81.168
接下来我们要对他们由低到高进行排序,也就是说171最后会出现在最右边,81会出现在最左边。
怎么实现呢?
我们将使用我们刚才说过的冒泡排序的规则进行实现:
冒泡规则说了两两比较大的往后放,首先163和171进行比较
163小于171所有位置不变
接下来171和130比较,171大于130所以171和130位置进行交换
然后171和81进行比较171大于81所以它们的位置也进行交换
然后171和168进行比较,171大于168,所以171和168的位置也进行交换
这个操作做完之后,171的位置就出现在了最右边的位置。
下一次再比较的时候171是不用参加的。
那么接下来第二次的比较,163大于130所以,它的位置也进行交换
163和81进行比较,163大于81所以它们的位置要进行交换
163小于168所以它们的的位置不发生改变,
这时第二大的值就出现在了这个位置
那么下一次168也不需要参与操作了,接着只需要比较这三个数据就可以了
130大于81所以它们,位置发生交换
然后130是小于163的所以它们的位置不发生改变
那么第三大的值就出现在了这里
0
那么下一次它也不需要参加比较了。
虽然还剩下81和130大小我们已经看出来了,但是它们还是要做一次比较因为,我们实际的数据它未必是按照上述的操作来排列好的,所以我们还要做最后一次比较,81小于130所以它们的位置不发生改变:
做完上述操作之后,这五个人就按照从高到低的顺序排列好了
那么在这个过程中,我们一共做了四次比较,而且每次比较都会有一个人下一次不参与比较。
小结:
- 如果有n个数据进行排序,总共需要比较n-1次。
- 每一次比较完毕,下一次的比较就会少一个数据参与。
代码实现冒泡排序:
/*
冒泡排序:
一种排序的方式,对要进行排序的数据中相邻的数据进行两两比较,将较大的数据放在后面.
依次对所有的数据进行操作,直至所有的数据按要求完成排序
*/
public class ArrayDemo {
public static void main(String[] args) {
//1.定义一个数组
int[] arr = {24, 69, 80, 57, 13};
System.out.println("排序前:" + arrayToString(arr));
/*
//3.第一次比较
for (int i = 0; i < arr.length - 1; i++) {
if (arr[i] > arr[i + 1]) {
int temp = arr[i];
arr[i] = arr[i + 1];
arr[i + 1] = temp;
}
}
System.out.println("第一次比较后" + arrayToString(arr));
//4.第二次比较
for (int i = 0; i < arr.length - 1 - 1; i++) {
if (arr[i] > arr[i + 1]) {
int temp = arr[i];
arr[i] = arr[i + 1];
arr[i + 1] = temp;
}
}
System.out.println("第二次比较后" + arrayToString(arr));
//5.第三次比较
for (int i = 0; i < arr.length - 1 - 1 - 1; i++) {
if (arr[i] > arr[i + 1]) {
int temp = arr[i];
arr[i] = arr[i + 1];
arr[i + 1] = temp;
}
}
System.out.println("第三次比较后" + arrayToString(arr));
//6.第四次比较
for (int i = 0; i < arr.length - 1 - 1 - 1 - 1; i++) {
if (arr[i] > arr[i + 1]) {
int temp = arr[i];
arr[i] = arr[i + 1];
arr[i + 1] = temp;
}
}
System.out.println("第四次比较后" + arrayToString(arr));
*/
//7.把上面的代码注释并进行优化,使用for循环实现冒泡排序,
for (int x = 0; x <= arr.length - 1; x++) {
for (int i = 0; i < arr.length - 1-x; i++) {
if (arr[i] > arr[i + 1]) {
int temp = arr[i];
arr[i] = arr[i + 1];
arr[i + 1] = temp;
}
}
System.out.println("第" + x + "次比较后" + arrayToString(arr));
}
}
//2.把数组中的元素按照指定的规则组成一个字符串,[元素1,元素2...]
public static String arrayToString(int[] arr) {
StringBuilder sb = new StringBuilder();
sb.append("[");
for (int i = 0; i < arr.length; i++) {
if (i == arr.length - 1) {
sb.append(arr[i]);
} else {
sb.append(arr[i] + ",");
}
}
sb.append("]");
String s = sb.toString();
return s;
}
}
4.2Arrays类的概述和常用方法
Arrays类在java.util包下,所以使用它是需要导包的.
该类包含用于操作数组的各种方法(例如排序和搜索)。
排序学过冒泡排序,搜索其实就是前面学过的查找。只不过它前面提供的更全面一些。
Arrays的成员方法
方法有很多,且全部是用static修饰的,我们先来看一下排序的方法。
我们重点看传递int数组的,它是按照数组的升序排列。
Arrays类包含用于操作数组的各种方法。
我们重点学两个:
public static String toString(int[] a)参数是int类型数组,返回值是String类型的,是返回指定数组的内容的字符串表示形式。也就是将int[] a内容按照指定的格式拼接成一个字符串,这个动作在学习冒泡排序的时候是做过的。
public static void sort(int[] a)参数是int类型数组,没有返回值,它是按照数字顺序排列指定的数组。
代码演示:
import java.util.Arrays;
/*
Arrays类包含用于操作数组的各种方法。
public static String toString(int[] a):返回指定数组的内容的字符串表示形式.
public static void sort(int[] a):按照数字顺序排列指定的数组.
*/
public class ArraysDemo {
public static void main(String[] args) {
//定义以一个数组
int[] arr = {24,69,80,57,13};
//演示:public static String toString(int[] a);
System.out.println("排序前:"+ Arrays.toString(arr));
//[24,69,80,57,13]
//排序:public static void sort(int[] a)
Arrays.sort(arr);
System.out.println("排序后:"+ Arrays.toString(arr));
//[13,24,57,69,80]
}
}
小结:
Arrays其实是一个工具类。
工具类的思想:
构造方法用private修饰(防止外界创建对象)。
成员用public static修饰(让外界只能使用类名来访问成员方法)。