数组
数组的基本概念及作用
数组是相同数据类型元素的集合
• 数组本身是引用数据类型,即对象。但是数组可以存储基本数据类型,
也可以存储引用数据类型。
数组的创建
●数组的声明的两种方式:
• 数据类型 [] 数组名字 例如:int [] a;
• 数据类型 数组的名字 [] 例如: int a [];
• 注意:
• 在Java语言中两种声明方法没有任何区别,但是建议大家用第一种,
避免混淆a的数据类型。
● 数组创建的三种方式:
● 声明数组的同时,根据指定的长度分配内存,但数组中元素值都为默认
的初始化值
int[] ary0 = new int[10];
● 声明数组并分配内存,同时将其初始化
int[] ary1 = new int[]{1, 2, 3, 4, 5};
● 与前一种方式相同,仅仅只是语法相对简略
int[] ary2 = {1, 2, 3, 4, 5};
● 从另一个角度,数组创建可以分为动态和静态两种
• 动态创建数组(没有为元素赋值,可以结合for循环进行赋值)
char[] chAry = new char[10];
• 静态创建数组,在创建的时候,即为每个元素赋初值
int[] ary1 = new int[]{1, 2, 3, 4, 5};
● 数组的长度:length属性
int [] b1 = new int []{1,2,3,4,5,6,7};
System.out.println(b1.length);
数组的访问与迭代
数组元素的访问:
• 数组名字[索引] 例如:a[0],a[1];
• 注意:
• 数组的索引从0开始。
• 索引的数据类型是整型
• 索引最大值和数组长度始终差1
数组迭代的两种方式:
第一种:for循环
int [] b1 = new int []{1,2,3,4,5,6,7};
数组的迭代
for(int i =0;i<b1.length;i++){
System.out.println(b1[i]);
}
数组迭代的两种方式:
第二种:增强for循环
int [] b1 = new int []{1,2,3,4,5,6,7};
for(数组元素的类型 临时变量名字 :数组的名字){
System.out.println(临时变量名字 );
}
即:
for(int x:b1){
System.out.println(x);
}
数组排序
● 冒泡排序
import java.util.Arrays;
public class Sort1 {
/*
冒泡排序:
每次取出相邻的两个元素进行比较,将较大的向后移动,
每一趟找到了一个最大值放到最后
int t = 5
int[] a = {5,4,3,2,1}
4 3 2 1 5 第一趟 最大值 5 移动到最右边
3 2 1 4 5 第二趟
2 1 3 4 5 第三趟
1 2 3 4 5 第四趟
比较4趟 每一趟取出相邻的两个元素进行比较
*/
public static void main(String[] args) {
int[] a = {5,4,3,2,1};
for(int i=0;i<a.length-1;i++){ //循环4趟
for(int j=0;j<a.length-1-i;j++){
if(a[j]>a[j+1]){
int t = a[j];
a[j] = a[j+1];
a[j+1] = t;
}
}
}
System.out.println(Arrays.toString(a));
}
}
● 选择排序
import java.util.Arrays;
public class Sort2 {
/*
选择排序
假设从第一个元素开始 与 后面的每一个元素进行比较,
如果后面的元素大于第一个元素,交换两者的位置
3 1 2 5 4
1 3 2 5 4
1 2 3 5 4
1 2 3 5 4
1 2 3 4 5
*/
public static void main(String[] args) {
int[] a = {3,1,2,4,5};
for (int i = 0; i < a.length-1; i++) {
for(int j=i+1;j<a.length;j++){
if(a[i]>a[j]){
int t = a[i];
a[i] = a[j];
a[j] = t;
//问题: 每次发现了一个较小的元素,就把它进行交换,交换的次数比较频繁
// 每次记录下较小元素的位置(索引),直到内存循环结束后,再进行交换
}
}
}
System.out.println(Arrays.toString(a));
}
}
二维数组
●二维数组的迭代:
int [][] b1 = new int [][]{{1,2},{3,4}};
for(int i =0;i<b1.length;i++){
for(int j =0;j<b1[i].length;j++){
System.out.print(b1[i][j]);
}
}
public class Demo4 {
/*
int []a = {1,2,3,45};
二维数据(多维数组): 数组中的每一个元素又是一个一维数组
声明
int[][] a;
int a[][];
*/
public static void main(String[] args) {
/*
new int[3][4]; [3]表示二维数组的长度是3(3个一维数组),[4]二维数组中一维数组的长度是4
{{0,0,0,0},{0,0,0,0},{0,0,0,0}}
0 1 2 3 0 1 2 3 0 1 2 3
0 1 2
*/
/*int [][] a = new int[3][4];
System.out.println(a.length);//获取的是二维数组的长度
System.out.println(a[1][2]);*/
/*
[3]表示二维数组长度是3,[]一维数组长度为空,表示在创建二维数组时,不会创建一维数组
{null,nul,null}
*/
/* int [][] a = new int[3][];
System.out.println(a.length);
int [] b = {1,2,3,4,5};
int [] c = {1,2,3,4};
int [] d = {1,2,3,4,5,6};
a[0] = b;
a[1] = c;
a[2] = d;
System.out.println(a[1][2]);
*/
int[][] a = new int[][]{{1,2,3,4},{1,2,3,4},{1,2,3,4}};
int[][] b = {{1,2,3,4},
{1,2,3,4},
{1,2,3,4}};
a[1][2] = 33;
System.out.println(a[1][2]);
}
}
public class Demo5 {
/*
int []a = {1,2,3,45};
二维数据(多维数组): 数组中的每一个元素又是一个一维数组
声明
int[][] a;
int a[][];
*/
public static void main(String[] args) {
int[][] a = new int[][]{{1,2,3,4},
{1,2,3,4},
{1,2,3,4}};
/*
二维数组遍历
使用双层循环
*/
for (int i = 0; i < a.length ; i++) {//遍历二维数组
for (int j = 0; j <a[i].length ; j++) {//遍历一维数组
System.out.print(a[i][j]+" ");//取出一维数组中的每一个元素
}
System.out.println();
}
}
}