文章目录

  • Java数组
  • 1、数组声明创建与初始化
  • 2、内存分析
  • 3、多维数组
  • 4、Arrays类
  • 5、冒泡排序 面试常遇见
  • 6、稀疏数组 重点 压缩数组
  • 7、二分查找法(折半查找法) 面试常见

Java数组

数组是相同类型数据的有序集合。每个数据称一个数组元素,每个元素可通过下标来进行访问。

1、数组声明创建与初始化

语法:

dataType[] arrayRefVar; // 首选,推荐使用
dataType arrayRefVar[]; // 效果相同,但不推荐使用
dataType[] arrayRefVar = new dataType[arraySize]; // 使用new方法创建数组,需要指定数组大小

获取数组长度:arrays.length;

  • 静态初始化
int[] a = {1,2,3};
Man[] mans = {new Man(1,1), new Man(2,2)};
  • 动态初始化
int[] a = new int[10];
a[0] = 1;
a[1] = 2;

没有赋值时,系统会隐式初始化,会赋给默认值。

数字默认是0,char类型默认u0000,Boolean类型默认false,引用类型默认null

  • 以下都是合法的定义数组
int num[][] = new int[1][];
int []num1[] = new int[1][];
int[][] num2 = new int[1][];
int[][] num3 = new int[1][2];

前面定义括号可以随意放,但是后面括号必须在类型后面,并且第一个括号必须有初始值。

2、内存分析

java 数据结构 数组和列表 java数组的构造方法_java 数据结构 数组和列表

数组也是对象,数组对象都是保存在堆中的。一个数组的长度是确定的,不可变的。

下标越界则报异常:ArrayIndexOutofBoundsException

3、多维数组

多维数组可以看成数组的数组。比如二维数组就是一个特殊的一维数组,其每一个元素都是一个一维数组。

二维数组:

int a[][] = new int[2][5];

java 数据结构 数组和列表 java数组的构造方法_初始化_02

4、Arrays类

  • 数组的工具类java.util.Arrays
  • Arrays类中的方法都是static修饰的静态方法,在使用的时候可以直接使用类名进行调用,可以不用使用对象来调用。
  • 具体有以下常用功能:
  • 给数组赋值:通过 fill 方法
  • 对数组排序:通过 sort 方法,按升序
  • 比较数组:通过 equals 方法比较数组中元素是否相等
  • 查找数组元素:通过 binarySearch 方法能对排序好的数组进行二分查找法操作
  • 打印数组元素:通过 toString 方法

5、冒泡排序 面试常遇见

看到嵌套循环,应立马得出这个算法的时间复杂度为O(n2)

public static int[] sort(int[] array){
    int temp = 0;
    // 如果在还没有循环完,就已经排好序了,就可以利用设置的flag跳出循环,可以节约循环时间(优化)
    boolean flag = false;
    
    // 外层循环,作用是指定循环次数,每一次循环都会将该次循环中的最小的数或者最大的数找出来
    // 一次循环找出一个数
    for(int i = 0; i < array.lenght; i++){
        // 内层循环,作用是每一次循环,对所有元素,进行依此两两比较
        for(int j = 0; j < array.lenght-1; 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;
}

6、稀疏数组 重点 压缩数组

当一个数组中大部分都是0,或者为同一值的数组时,可以使用稀疏数组来保存该数组。

稀疏数组就是存入原数组的有效值的数组,对原数组进行有效压缩。

稀疏数组的处理方式:

  • 记录数组一共有几行几列,有多少个不同值
  • 把具有不同值的元素和行列及值记录在一个小规模的数组中,从而缩小程序的规模

java 数据结构 数组和列表 java数组的构造方法_初始化_03

稀疏数组:[0] 存入的是原数组有几行几列几个有效值;从[1]开始存入的是第几行第几列值是多少

7、二分查找法(折半查找法) 面试常见

public class Test{
    public static void main(Strings[] args){
        int[] a = {45,34,23,12,10,55,76};
        new Test.binarySearch(a,10);
    }
    
    public void binarySearch(int[] a, int b){
        Array.sort(a);
        int low = 0;
        int high = a.length - 1;
        while( low <= high ){
            int mid = (low + high) / 2;
            if( b < a[mid] ){
                high = mid - 1;
            }
            if( b > a[mid] ){
                low = mid + 1;
            }
            if( b == a[mid] ){
                System.out.println("查找成功!");
                break;
            }
        }
    }
}