文章目录
一、数组简单介绍
1、数组的定义
数组是用来储存固定大小的同种类型元素的集合。
数组变量是引用变量。
(1)声明数组
数组类型[ ] 数组名称;
int[] num;//整数数组
char[] character;//字符数组
boolean[] flag;//布尔类型数组
(2)创建数组
使用new命令来创建一个新的数组。
int[] num;//整数数组
num=new int[10];//创建新的数组,并将这个数组的引用赋值给num
同样,可以将(1)和(2)中的步骤合二为一:
int[] num=new int[10];
//声明数组变量,创建新数组,并将新数组的引用赋值给声明的数组变量
常用定义数组共有三种方法:
int[] num=new int[5];//方法1
int[] num=new int[]{
1,2,3,4,5};//方法2
int[] num={
1,2,3,4,5};//方法3
//数组下标从0开始,到(数组长度-1)结束。
2、数组常用方法
(1)输出一个数组
需要导入java.util.Arrays,调用Arrays.toString(数组名)方法。
代码示例
import java.util.Arrays;//导入包
public class Demo01 {
public static void main(String[] args) {
int[] src = {
1,2,3,4,5,6};
System.out.println(Arrays.toString(src));//调用方法
}
}
结果如下:
(2)将字符串转化为字符数组
利用toCharArray()方法,声明 字符数组=字符串变量.toCharArray()。
代码示例:
public static void main(String[] args) {
String str="goodbye";
char[] ch=str.toCharArray();
System.out.println(Arrays.toString(ch));
}
结果如下:
(3)数组的复制
使用Arrays.copyOf()方法。
声明的新数组=Arrays.copyOf(原数组,新数组长度);
代码示例:
public static void main(String[] args) {
int[] num={
1,2,3,4,5};
int[] newnum=Arrays.copyOf(num,7);
System.out.println(Arrays.toString(newnum));
}
结果如下:
Arrays.copyOf()方法是整个复制数组,有时候显得不够灵活,此时可以使用System.arraycopy()方法。
System.arraycopy(原数组,原数组开始复制的下标,新数组,新数组开始粘贴的下标,复制长度);
代码如下:
public static void main(String[] args) {
int[] num={
1,2,3,4,5};
int[] newnum=new int[6];
System.arraycopy(num,1,newnum,0,3);
/*
原数组num,num[1]开始复制,新数组newnum,
newnum[0]开始复制,一共复制3位。
*/
System.out.println(Arrays.toString(newnum));
}
结果如下:
相比Arrays.copyOf()方法来说,System.arraycopy()更加灵活,但是需要注意复制长度过长和复制粘贴起始下标的值,防止下标越界的问题。
二、数组排序
(1)Arrays.sort()方法
Arrays.sort(数组名),这是一个void方法,没有返回值,原数组中的数字会从小到大排好。
代码示例:
public static void main(String[] args) {
int[] num={
32,3,41,5,66,74};
System.out.println(Arrays.toString(num));//原数组
Arrays.sort(num);//进行排序
System.out.println(Arrays.toString(num));//排序后的数组
}
结果如下:
(2)冒泡排序
冒泡排序是一种简单的排序算法,通过遍历比较相邻的两个元素(设从小到大排),将放置位置错误的元素(大–小)交换顺序(小–大)。重复工作直到没有元素需要进行交换,说明排序工作已经完成。如同汽水中的泡泡缓慢浮出水面,故以此命名。冒泡排序是一种稳定的排序方式
代码示例:
public static void main(String[] args) {
int[] arr={
33,4,32,56,7,45};
System.out.println(Arrays.toString(arr));//原数组
for(int i = 0; i < arr.length - 1; i++) {
/*一次次遍历,每次都有一个数浮出水面(不需再比),
故每次遍历长度减1*/
for(int j = 0; j < arr.length - 1 - i; j++) {
/*每次遍历时比较相邻两个数大小,
若错误便交换位置(示例为从小到大)
*/
if (arr[j] > arr[j + 1]) {
/*使用局部变量储存arr[j]的值,arr[j]被赋arr[j+1]
的值后再将储存着arr[j]的值的temp的值赋予arr[j+1]
完成值的交换
*/
int temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
//tip:相同变量相邻,arr[j]挨着,arr[j+1]也挨着
}
}
}
System.out.println(Arrays.toString(arr));//输出排序后的数组
}
结果如下:
(3)选择排序
选择排序是一种简单直观的排序算法,从数组中选择出一个最大/最小的数值,将其放在最前面,再从剩下未排序的数组中选择出一个最大/最小的数,放在已排序的数组的末尾,以此类推,直到未排序的数据元素个数为零。相比冒泡排序,选择排序更快捷,但是更不稳定。
代码示例:
public static void main(String[] args) {
int[] num={
23,45,3,123,22,37,75};
System.out.println(Arrays.toString(num));//输出原数组
for (int i = 0; i < num.length; i++) {
int temp = i;//假设未排序数组第一个元素最小
//遍历剩下的元素
for (int j = i; j < num.length; j++) {
if (num[temp] > num[j]) {
temp = j;//当发现比目前下标元素更小的,更换标记下标
}
}
//交换两个元素位置
int t = num[i];
num[i] = num[temp];
num[temp] = t;
}
System.out.println(Arrays.toString(num));//输出数组
}
结果如下:
(4)插入排序
插入排序是一种简单的排序算法,适合少量元素的排序,其基本思想是在已经排好序的数组中插入新元素,从而生成一个元素个数+1的新数组。插入排序是一种稳定的排序方式。
代码示例:
public static void main(String[] args) {
int[] num={
23,16,95,74,93};
System.out.println(Arrays.toString(num));//输出原数组
for (int i=1;i<num.length;i++) {
for(int j=i;j>0&&(num[j]<(num[j-1]));j--) {
int temp=num[j];
num[j]=num[j-1];
num[j-1]=temp;
}
}
System.out.println(Arrays.toString(num));//输出新数组
}
结果如下: