目录:
数组
数组的定义
-
数组是相同类型的有序集合
-
数组描述的是相同类型的若干个数据,按照一定的先后次序排列组合而成
-
每一个数据称作一个数组元素,每个数组元素可以通过一个下标来访问
数组声明创建
数组类型 [] 数组名;//首选
数组类型 数组名[];//效果一样,但不是首选
Java语言使用new操作符来创建数组,语法如下:
数组类型 [] 数组名 = new 数组类型[数组空间];
double[]b=new double[5];
数组元素是通过索引去访问的,数组索引从0开始
double[]b=new double[5];
b[0]=1;
获取数组的长度:
b.length
静态初始化:创建+赋值
int[]a={1,2,3,4,5};
System.out.println(a[0]);
动态初始化:包含默认初始化
int[]b=new int[5];
b[0]=1;
b[1]=2;
数组的四个基本特点
-
长度是确定的,数组一旦被创建,它的大小就是不可以改的
-
元素必须是相同类型,不允许出现混合类型
-
数组中的元素可以是任意类型,包括基本类型和引用类型
-
数组变量属引用类型,数组也可以看成是对象,数组中的每个元素相当于该对象的成员变量,数组本身就是对象,Java中的对象是在堆中的,因此数组无论保存原始类型还是其他对象类型,数组对象本身是在堆中的。
数组的使用
普通的for循环
int[] arrays = {1, 2, 3, 4, 5};
//打印全部的数组元素
for (int i = 0; i < arrays.length; i++) {
System.out.print(arrays[i] + "\t");
}
for-each循环
int[] arrays = {1, 2, 3, 4, 5};
//打印全部的数组元素
for (int array : arrays) {
System.out.println(array);
}
数组作方法入参
int[] arrays = {1, 2, 3, 4, 5};
//打印全部的数组元素
public static void printArray(int[]arrays){
for (int i=0;i<arrays.length;i++){
System.out.print(arrays[i]+"\t");
}
}
数组作返回值
//反转数组
public static int[] reverse(int[]arrays){
int[] results=new int[arrays.length];
for (int i=0,j= results.length-1;i<results.length;i++,j--){
results[i]=arrays[j];
}
return results;
}
多维数组
多维数组可以看成是数组的数组,比如二维数组就是一个特殊的一维数组,其中每一个元素都是一个一维数组
二维数组:
int[][]array = new int[2][5];//两行五列的数组
int[][]a={{1,2},{2,3},{3,4},{4,5}};// int[][] a = new int[4][2];4行2列
/*
1,2 array[0]
2,3 array[1]
3,4 array[2]
4,5 array[3]
*/
二维数组使用:
for (int i=0;i<a.length;i++){
for(int j=0;j<a[i].length;j++){
System.out.print(a[i][j]+"\t");
}
}
Arrays类
Arrays类里面包含了很多数组方法,可以直接使用它来解决很多数组问题
int[]a={1,2,3,4,9090,543,21,6,25};
System.out.println(a);//[I@1b6d3586
//打印数组元素
System.out.println(Arrays.toString(a));
//数组排序
Arrays.sort(a);
System.out.println(Arrays.toString(a));
冒泡排序
冒泡排序无疑是最出名的排序算法之一,总共有八大排序
冒泡的代码相对简单,两层循环,外层冒泡轮数,里层依次比较,人尽皆知
冒泡排序:
1.比较数组中两个相邻的元素,如果第一个数比第二个数大,我们就交换它们的位置
2.每一次比较,都会产生出一个最大,或者最小的数字
3.下一轮则可以少一次排序
4.一次循环直到结束
public static int[] sort(int[]array){
//临时变量
int temp=0;
//外层循环,判断我们要走多少次
for (int i = 0; i < array.length-1; i++) {
boolean flag=false;//通过flag标识位减少没有意义的比较
//内层循环,比较数组中两个相邻的元素,如果第一个数比第二个数大,我们就交换它们的位置
for(int j=0;j< array.length-1-i;j++){
if (array[j+1]<array[j]){
temp=array[j];
array[j]=array[j+1];
array[j+1]=temp;
flag=true;
}
}
if(flag==false){
break;
}
}
return array;
}