数组
- 数组的概述
- 一维数组的创建与使用
- 创建一维数组
- 初始化一维数组
- 使用一维数组
- 二维数组的创建及使用
- 二维数组的创建
- 二维数组的初始化
- 使用二维数组
- 二分法查找
- 数组排序算法
- 冒泡排序
- 选择排序
- Array工具类的使用
数组的概述
数组(Array)是多个相同类型数据按一定顺序排列的集合,并使用一个名字命名,并通过编号的方式对这些数据进行统一管理。
数组的长度一旦确定,就不能修改. 我们可以直接通过下标(或索引)的方式调用指定位置的元素。数组的下标从0开始。
数组的分类:
按照维度:一维数组、二维数组、多维数组
按照元素的数据类型分:基本数据类型元素的数组、引用数据类型元素的数组(即对象数组)
一维数组的创建与使用
创建一维数组
数组作为对象允许使用new关键字进行内存分配。在使用数组之前,必须首先定义数组变量的数据类型。一维数组的创建有一些两种方式。
1.先声明,再使用new关键字进行内存分配
声明方式:
数组元素类型 数组名字[];
数组元素类型 [] 数组名字;
例如:int arr[];
为数组声明内存空间:
数组名字=new 数组元素类型[数组元素的个数];
例如:arr=new int[5];
2.声明数组的同时为数组分配内存空间
数组元素类型 数组名=new 数组元素类型[数组元素的个数];
例如:int month=new month[12];
初始化一维数组
数组的初始化就是给数组中每个元素赋值
数组初始化的两种形式:
int arr[]=new int[]{1,3,56,7};
int arr2[]={23,67,99,11}
使用一维数组
练习1:使用一维数组将1-12月各月天数输出
public class ArrayTest {
public static void main(String[] args) {
int day[]={31,28,31,30,31,30,31,31,30,31,30,31};
for(int i=0;i<day.length;i++){
System.out.println((i+1)+"月有"+day[i]+"天");
}
}
}
练习2:从键盘读入学生成绩,找出最高分,并输出学生成绩等级。
成绩>=最高分-10 等级为’A’
成绩>=最高分-20 等级为’B’
成绩>=最高分-30 等级为’C’
其余 等级为’D’
import java.util.Scanner;
public class ArrayTest2 {
public static void main(String[] args) {
System.out.println("请输入学生人数:");
Scanner sc=new Scanner(System.in);
int sCount=sc.nextInt();
int arr[]=new int[sCount];
System.out.println("请输入"+sCount+"个成绩:");
Scanner sc1=new Scanner(System.in);
for(int i=0;i<arr.length;i++){
arr[i]=sc1.nextInt();
}
int max=arr[0];
for(int j=0;j<arr.length;j++){
if(max<arr[j])max=arr[j];
}
System.out.println("最高分是:"+max);
for(int i=0;i<arr.length;i++){
if(arr[i]>=max-10){
System.out.println("学生"+(i+1)+"的成绩是:"+arr[i]+",等级是A!");
}else if(arr[i]>=max-20){
System.out.println("学生"+(i+1)+"的成绩是:"+arr[i]+",等级是B!");
}else if(arr[i]>=max-30){
System.out.println("学生"+(i+1)+"的成绩是:"+arr[i]+",等级是C!");
}else{
System.out.println("学生"+(i+1)+"的成绩是:"+arr[i]+",等级是D!");
}
}
}
}
请输入学生人数:
5
请输入5个成绩:
56
74
89
41
89
最高分是:89
学生1的成绩是:56,等级是D!
学生2的成绩是:74,等级是B!
学生3的成绩是:89,等级是A!
学生4的成绩是:41,等级是D!
学生5的成绩是:89,等级是A!
二维数组的创建及使用
二维数组的创建
二维数组可以看作是特殊的一维数组,与一维数组一样同样有两种创建方式
1:先声明,再使用new关键字进行内存分配
声明方式:
数组元素类型 数组名字[][];
数组元素类型[][] 数组名字;
例如: int arr[][];
为数组分配内存空间
arr=new int[2][5];
2:声明数组的同时分配内存空间
int arr2[][]=new int[2][5];
二维数组的初始化
二维数组的初始化与一维数组类似,同样可以使用大括号完成。
声明语法如下:
type arrayname[][]={value1,value2,…valuen}
使用二维数组
练习1:使用二维数组输出一个3行4列且所有元素都是*的矩阵
public class ArrayTest3 {
public static void main(String[] args) {
String arr[][]={{"*","*","*","*",},{"*","*","*","*",},{"*","*","*","*",}};
for(int i=0;i<arr.length;i++){
for(int j=0;j<arr[i].length;j++){
System.out.print(arr[i][j]);
}
System.out.println();
}
}
}
****
****
****
练习2:使用二维数组打印一个10行杨辉三角
public class ArrayTest4 {
public static void main(String[] args) {
int[][] yangHui=new int[10][];
for(int i=0;i<yangHui.length;i++){
yangHui[i]=new int[i+1];
yangHui[i][0]=yangHui[i][i]=1;
for(int j=1;j<yangHui[i].length-1;j++){
yangHui[i][j]=yangHui[i-1][j-1]+yangHui[i-1][j];
}
}
for(int i=0;i<yangHui.length;i++){
for(int j=0;j<yangHui[i].length;j++){
System.out.print(yangHui[i][j]+" ");
}
System.out.println();
}
}
}
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
1 5 10 10 5 1
1 6 15 20 15 6 1
1 7 21 35 35 21 7 1
1 8 28 56 70 56 28 8 1
1 9 36 84 126 126 84 36 9 1
二分法查找
前提:所要查找的数组必须有序
假设待查找的有序数列为1,3,5,7,9,11,19,21,25,我们要找的元素为19,请用二分查找算法找到对应的下标元素
public class ArrayTest5 {
public static void main(String[] args) {
int []arr=new int[]{1,3,5,7,9,11,19,21,25};
int dest=19;
int head=0;
int end=arr.length-1;
while(head<=end){
int middle=(head+end)/2;
if(dest==arr[middle]){
System.out.println(dest+"对应的下标元素为:"+middle);
break;
}else if(arr[middle]>dest) {
end=middle-1;
}else{
head=middle+1;
}
}
}
}
数组排序算法
冒泡排序
基本思想:
冒泡排序的基本思想是对比相邻的元素值,如果满足条件就交换元素值,把较小的元素移动到数组前面,把较大的元素移动到元素后面(也就是交换两个元素的位置),这样较小的元素就像气泡一样从底部上升到顶部。
代码实现:
public class BubbleSort {
public static void main(String[] args) {
int []arr={63,1,24,77,45,3};
System.out.println("原数组为:");
for(int i=0;i<arr.length;i++){
System.out.print(arr[i]+" ");
}
System.out.println();
for(int i=1;i<arr.length;i++){
for(int j=0;j<arr.length-1;j++){
if(arr[j]>arr[j+1]){
int temp=arr[j];
arr[j]=arr[j+1];
arr[j+1]=temp;
}
}
}
System.out.println("排序后的数组为:");
for(int i=0;i<arr.length;i++){
System.out.print(arr[i]+" ");
}
}
}
选择排序
基本思想:
选择排序的基本思想是将指定排序位置与其他数组元素分别对比,如果满足条件就交换元素值。与冒泡排序区别,不是交换相邻元素,而是满足条件的元素与指定的排序位置交换。
代码实现:
public class SelectSort {
public static void main(String[] args) {
int []arr={63,1,24,77,45,3};
System.out.println("原数组为:");
for(int i=0;i<arr.length;i++){
System.out.print(arr[i]+" ");
}
System.out.println();
int index;
for(int i=1;i<arr.length;i++){
index=0;
for(int j=1;j<=arr.length-i;j++){
if(arr[j]>arr[index]){
index=j;
}
}
int temp=arr[arr.length-i];
arr[arr.length-i]=arr[index];
arr[index]=temp;
}
System.out.println("排序后的数组为:");
for(int i=0;i<arr.length;i++){
System.out.print(arr[i]+" ");
}
}
}
Array工具类的使用
java.util.Arrays类即为操作数组的工具类,包含了用来操作数组(比如排序和搜索)的各种方法。
boolean equals(int[] a,int[] b) | 判断两个数组是否相等 |
String toString(int[] a) | 输出数组信息 |
void fill(int[] a,int val) | 将指定值填充到数组之中 |
void sort(int[] a) | 对数组进行排序 |
int binarySearch(int[] a,int key) | 对排序后的数组进行二分法检索指定的值 |
使用Array工具类进行数组排序
import java.util.Arrays;
public class SortTest {
public static void main(String[] args) {
int [] numbers = {5,900,1,5,77,30,64,700};
Arrays.sort(numbers);
for(int i = 0; i < numbers.length; i++){
System.out.println(numbers[i]); }
}
}