前面二白讲了关于数组的概念、语法以及简单的输入输出,实际上关于数组的知识还有很多,接下来咱们讲一下冒泡排序以及一些常用的Arrays工具类,需要记忆的知识很多,而且容易混淆。
一、冒泡排序
简介(原理)
升序为例:
从头开始,每次比较相邻两数
小的交换到前面
每轮结束后最大的数交换到最后
代码实现:
java
package com.kgc.se;
/**
* @JdkVersion: 17
* @Author: 二白程序员
* @Date 2024/4/9 8:50
* QQ:1512015112
* VX:18056394367
*/
public class Demo01 {
public static void main(String[] args) {
// 使用双重for循环实现对数组的升序排序
int[] nums = {96,45,87,32,11,55,88,30,19,44,63};
//在排序前输出数组中所有的元素
System.out.println("数组排序前:");
for(int i =0;i<nums.length;i++){
System.out.print(nums[i]+" ");
}
System.out.println();
//升序排序
//外层循环变量控制比较的轮数
for(int i =0;i<nums.length-1;i++){
//内层循环变量控制每一轮的比较次数
for(int j =0;j< nums.length-1-i;j++){
//比较相邻的两个元素
if(nums[j]>nums[j+1]){
//交换位置
int temp = nums[j];
nums[j]=nums[j+1];
nums[j+1]=temp;
}
}
}
//排序结束后,遍历数组
System.out.println("数组排序后:");
for(int i =0;i<nums.length;i++){
System.out.print(nums[i]+" ");
}
}
}
二、Arrays工具类
1.String Arrays.toString(数组名)
将数组转换为字符串
例:
java
package com.kgc.se;
import java.util.Arrays;
/**
* @JdkVersion: 17
* @Author: 二白程序员
* @Date 2024/4/9 13:59
* QQ:1512015112
* VX:18056394367
*/
public class Demo {
public static void main(String[] args) {
int [] demo = {1,3,5,7,27,8,22};
String string = Arrays.toString(demo);
System.out.println(string);
}
}
也可以简写直接输出,结果一样
java
package com.kgc.se;
import java.util.Arrays;
/**
* @JdkVersion: 17
* @Author: 二白程序员
* @Date 2024/4/9 13:59
* QQ:1512015112
* VX:18056394367
*/
public class Demo {
public static void main(String[] args) {
int [] demo = {1,3,5,7,27,8,22};
System.out.println(Arrays.toString(demo));
}
}
2.Arrays.sort(数组名)
对数组进行升序排序,可以写冒泡排序代码,也可以直接使用Arrays类中的sort()方法进行排序
例:
java
int[] nums = {56,36,78,12,95,40,33};
System.out.println("数组排序前:");
System.out.println(Arrays.toString(nums));
Arrays.sort(nums);
System.out.println("数组排序后:");
3.boolean Arrays.equals(数组名1,数组名2)
比较两个数组是否相同,如果两个数组中的元素个数,对应下标上的元素值相同,返回true,否则返回false
例:
java
package com.kgc.se;
import java.util.Arrays;
/**
* @JdkVersion: 17
* @Author: 二白程序员
* @Date 2024/4/9 13:59
* QQ:1512015112
* VX:18056394367
*/
public class Demo {
public static void main(String[] args) {
int [] demo = {1,3,5,7,27,8,22};
int [] demo1 = {1,3,5,7,27,8,22};
System.out.println(Arrays.toString(demo));
boolean result = Arrays.equals(demo,demo1);
System.out.println("result = " + result);
}
}
4.Arrays.fill()
1)static void fill(int[] a, int val)
将指定的 int 值分配给指定 int 型数组的每个元素。
例:
java
package com.kgc.se;
import java.util.Arrays;
/**
* @JdkVersion: 17
* @Author: 二白程序员
* @Date 2024/4/9 13:59
* QQ:1512015112
* VX:18056394367
*/
public class Demo {
public static void main(String[] args) {
int [] demo = {1,3,5,7,27,8,22};
System.out.println(Arrays.toString(demo));
System.out.println("--------------------------");
Arrays.fill(demo,250);
System.out.println(Arrays.toString(demo));
}
}
2)static void fill(int[] a, int fromIndex, int toIndex, int val)
将指定的 int 值分配给指定 int 型数组指定范围中的每个元素。注意:包含fromIndex的元素,不包含toIndex的元素
java
package com.kgc.se;
import java.util.Arrays;
/**
* @JdkVersion: 17
* @Author: 二白程序员
* @Date 2024/4/9 13:59
* QQ:1512015112
* VX:18056394367
*/
public class Demo {
public static void main(String[] args) {
int [] demo = {1,3,5,7,27,8,22};
System.out.println(Arrays.toString(demo));
System.out.println("--------------------------");
Arrays.fill(demo,2,4,250);
System.out.println(Arrays.toString(demo));
}
}
5.Arrays.copyOf
static int[] copyOf(int[] original, int newLength)
复制指定的数组,截取或用 0 填充(如有必要),以使副本具有指定的长度。
java
package com.kgc.se;
import java.sql.Array;
import java.util.Arrays;
/**
* @JdkVersion: 17
* @Author: 二白程序员
* @Date 2024/4/9 13:59
* QQ:1512015112
* VX:18056394367
*/
public class Demo {
public static void main(String[] args) {
int [] demo = {1,3,5,7,27,8,22};
System.out.println(Arrays.toString(demo));
System.out.println("--------------------------");
int[] demo1 = Arrays.copyOf(demo,4);
System.out.println(Arrays.toString(demo1));
}
}
6.Arrays.copyOfRange
static int[] copyOfRange(int[] original, int from, int to)
将指定数组的指定范围复制到一个新数组。
注意:包含开始下标的元素值,不包含结束下标的元素值
java
package com.kgc.se;
import java.sql.Array;
import java.util.Arrays;
/**
* @JdkVersion: 17
* @Author: 二白程序员
* @Date 2024/4/9 13:59
* QQ:1512015112
* VX:18056394367
*/
public class Demo {
public static void main(String[] args) {
int [] demo = {1,3,5,7,27,8,22};
System.out.println(Arrays.toString(demo));
System.out.println("--------------------------");
int[] demo1 = Arrays.copyOfRange(demo,2,5);
System.out.println(Arrays.toString(demo1));
}
}
扩展:除了上面的Arrays类中的copyOf()方法和copyOfRange()方法可以复制数组,System类中也有一个方法可以复制数组
static void arraycopy(Object src, int srcPos, Object dest, int destPos, int length)
从指定源数组中复制一个数组,复制从指定的位置开始,到目标数组的指定位置结束。
src - 源数组。
srcPos - 源数组中的起始位置。
dest - 目标数组。
destPos - 目标数据中的起始位置。
length - 要复制的数组元素的数量。
java
package com.kgc.se;
import java.sql.Array;
import java.util.Arrays;
/**
* @JdkVersion: 17
* @Author: 二白程序员
* @Date 2024/4/9 13:59
* QQ:1512015112
* VX:18056394367
*/
public class Demo {
public static void main(String[] args) {
int [] demo = {1,3,5,7,27,8,22};
int[] demo1 = new int[10];
System.out.println(Arrays.toString(demo));
System.out.println("--------------------------");
System.arraycopy(demo,3,demo1,1,4);
System.out.println(Arrays.toString(demo1));
}
}
7.Arrays.binarySearch
1)static int binarySearch(int[] a, int key)
使用二分搜索法来搜索指定的 int 型数组,以获得指定的值。
注意:使用Arrays类中查找数组元素的方法之前,要对数组进行排序,否则不能保证查找结果的正确性
java
package com.kgc.se;
import java.sql.Array;
import java.util.Arrays;
/**
* @JdkVersion: 17
* @Author: 二白程序员
* @Date 2024/4/9 13:59
* QQ:1512015112
* VX:18056394367
*/
public class Demo {
public static void main(String[] args) {
int [] demo = {1,3,5,7,27,8,22};
System.out.println(Arrays.toString(demo));
System.out.println("--------------------------");
Arrays.sort(demo);
System.out.println(Arrays.toString(demo));
int index = Arrays.binarySearch(demo,8);
System.out.println("8的值在数组中的下标为: " + index);
}
}
2)static int binarySearch(int[] a, int fromIndex, int toIndex, int key)
使用二分搜索法来搜索指定的 int 型数组的范围,以获得指定的值。注意:查找范围包含开始下标元素,不包括结束下标元素值
java
package com.kgc.se;
import java.sql.Array;
import java.util.Arrays;
/**
* @JdkVersion: 17
* @Author: 二白程序员
* @Date 2024/4/9 13:59
* QQ:1512015112
* VX:18056394367
*/
public class Demo {
public static void main(String[] args) {
int [] demo = {1,3,5,7,27,8,22};
System.out.println(Arrays.toString(demo));
System.out.println("--------------------------");
Arrays.sort(demo);
System.out.println(Arrays.toString(demo));
int index = Arrays.binarySearch(demo,2,6,8);
System.out.println("8的值在数组中的下标为: " + index);
}
}