数组的概述

数组(Array):

是多个相同类型数据按一定顺序排列的集合,并使用一个名字命名。并通过编号的方式对这些数据进行统一管理

数组相关的概念

1.数组名
2.元素
3.角标、下标、索引
4.数组的长度(元素的个数)

数组的特点

1.数组是有序排列的
2.数组属于引用数据类型的变量,数组的元素,既可以是基本数据类型,也可以是引用数据类型
3.创建数组对象会在内存中开辟一整块连续的空间
4.数组的长度一旦确定,就不能修改

数组的分类

1.按照维数分:一维数组、二维数组……
2.按照数组元素的类型分:基本数据类型的数组、引用数据类型元素的数组

一维数组

声明和初始化

int[] ids; 声明
静态初始化:数组的初始化和数组元素的赋值操作同时进行
ids=new int[]{1001,1002,1003,1004};
动态初始化:数组的初始化和数组元素的赋值操作分开进行
String[] names=new String[5];
(长度)
错误写法:
int[] arr1=new int[];
int[5] arr2=new int[5];
int[] arr3=new int[3]{1,2,3};
注:数组一旦初始化完成,其长度就确定了

调用数组的指定位置的元素

通过角标的方式调用
注:数组的角标(或索引)从0开始的,到数组的长度-1结束
例:
int[] ids;
String[] names=new String[5];
names[0]=”苹果”;
names[1]=”香蕉”;
names[2]=”菠萝”;
names[3]=”鸭梨”;
names[4]=”西瓜”;

获取数组长度

属性:length
System.out.println(names.length);

遍历数组

for(int i=0;iSystem.out.println(names[i]);
}
无论多少个元素,这个结构都能遍历

数组元素的默认初始化值

1.整型:0
2.浮点型:0.0
3.char型:0或’\u0000’,而非’0’
4.boolean型:false
5.引用数据类型:null

内存简化结构

屏幕截图 2021-12-06 212226.jpg

二维数组

声明和初始化

静态初始化:int[][] arr1=new int[][]{{1,2,3},{4,5},{6,7,8}};
动态初始化:
1.String[][] arr2=new String[3][2];
2.String[][] arr3=new String[3][];
错误的情况:
1.String[][] arr4=new String[][4];
2.String[3][4] arr5=new String[][];
3.int[][] arr6=new int[3][4]{{1,2,3}{4,5}};
其他正确的情况:
1.int[] arr4[]=new int[][]{{1,2,3}{4,5}};
2.int[] arr5[]={{1,2,3}{4,5,6}};

调用数组的指定位置的元素

System.out.println(arr1[0][1]); 2
System.out.println(arr2[1][1]); null

arr3[1]=new String[4];
System.out.println(arr3[1][0]);

获取数组长度

System.out.println(arr4.length); 3
System.out.println(arr4[0].length); 3
System.out.println(arr4[1].length); 2

遍历二维数组

  1. for(int i=0;i<arr4.length;i++){
  2. for(int j=0;j<arr4[i].lenggth;j++){
  3. System.out.print(arr4[i][j]+" ");
  4. }
  5. System.out.println();
  6. }

二维数组元素默认初始化值

规定:二维数组分为外层数组元素,内层数组元素
int[][] arr=new int[4][3];
外层元素:arr[0],arr[1]
内层元素:arr[0][0],arr[1][2]
方式一:int[][] arr=new int[4][3];
外层元素的初始化值:地址值
内层元素的初始化值:与一维数组初始化情况相同
方式二:int[][] arr=new int[4][];
外层元素的初始化值:null
内层元素的初始化值:不能调用,否则报错

二维数组内存解析

屏幕截图 2021-12-08 091513.jpg

数组的复制

  1. array2=new int[array1.length];
  2. for(int i=0;i<array2.length;i++){
  3. array[i]=array1[i];
  4. }

数组的反转

法1:

  1. for(int i=0;i<arr.length/2;i++){
  2. String temp=arr[i];
  3. arr[i]=arr[arr.length-i-1];
  4. arr[arr.length-i-1]=temp;
  5. }

法2:

  1. for(int i=0,j=arr.length-1;i<j;i++,j--){
  2. String temp=arr[i];
  3. arr[i]=arr[j];
  4. arr[j]=temp;
  5. }

线性查找

  1. String dest="要找的数据";
  2. boolean isFlag=true;
  3. for(int i=0;i<arr.length;i++){
  4. if(dest.equals(arr[i])){
  5. System.out.println("找到了指定的元素,位置为:"+i);
  6. isFlag=false;
  7. break;
  8. }
  9. }
  10. if(isFlag){
  11. System.out.println("很遗憾,没有找到")
  12. }

二分法查找

注:数组元素必须从小到大排列

  1. int[] arr=new int[] {1,2,3,4,5};
  2. int find=63;
  3. int head=0;
  4. int end=arr.length-1;
  5. boolean isflag=true;
  6. while(head<=end) {
  7. int middle=(head+end)/2;
  8. if(find==arr[middle]) {
  9. System.out.println("找到了指定元素,位置为"+middle);
  10. isflag=false;
  11. break;
  12. }else if(arr[middle]>find) {
  13. end=middle-1;
  14. }else {
  15. head=middle+1;
  16. }
  17. }
  18. if(isflag) {
  19. System.out.println("很遗憾没有找到");
  20. }

冒泡排序

  1. int[] arr = new int[] {19,27,3,16,55};
  2. for(int i=0;i<arr.length-1;i++) {
  3. for(int j=0;j<arr.length-1-i;j++) {
  4. if(arr[j]>arr[j+1]) {
  5. int temp=arr[j];
  6. arr[j]=arr[j+1];
  7. arr[j+1]=temp;
  8. }
  9. }
  10. }
  11. for(int i=0;i<arr.length;i++) {
  12. System.out.println(arr[i]);
  13. }

排序

屏幕截图 2021-12-09 174334.jpg
屏幕截图 2021-12-09 174409.jpg

数组中的工具类使用

1.equals(int[] a,int[] b) (boolean类型) 判断两个数组是否相等
例:
int[] arr1=new int[]{1,2,3,4};
int[] arr2=new int[]{1,3,2,4};
booleaan isEquals=Arrays.equals(arr1,arr2);
System.out.println(isEquals);
2.toString(int[] a) (String类型) 输出数组信息
例:
System.out.println(Arrays.toString(arr1));
3.fill(int[] a,int 指定值) 将指定值填充到数组之中
例:
Arrays.fill(arr1,10); (void类型)
System.out.println(Arrays.toString(arr1));
4.sort(int[] a) 对数组进行排序
例:
Array.sort(arr2); (void类型)
System.out.println(Array.toString(arr2));
5.binarySearch(int[] a,int 要查找的数) 进行二分法查找
例:
int[] arr3=new int[]{-98,-56,2,34,56};
int index=Array.binarySearch(arr3,210);
if(index>=0){
System.out.println(index);
}e;se{
System.out.println(“未找到”);
}