Bootstrap

数组的相关问题

一。1 概念

存储多个相同类型数据,有固定的长度。Integer.MAX_VALUE-8

索引: 下标 O(1)

2. 定义数组

2.1 固定长度,定值

 int[] a = {1,2,3,4};

2.2 动态数据

int[] a = new int[6];

2.3 other

int[] a = new int[]{1,2,3};

3.数组特性

3.1 固定长度

数组名称.length ---属性

3.2 索引从0开始 

[0, a.length-1];

3.3 访问数组

a[ i ]

3.4  数组的遍历

3.4.1 循环

for(int i=0;i<10;i++){
System.out.println(a[i]);
}

3.4.2 增强型for:foreach

for( int t : a){
System.out.print(t+ "\t");
}

案例 1.找出数组中的第二大值

public static int second(int[] a){
        int max=a[0];
        int second=a[1];
        if(max<second){
            int t=max;
            max=second;
            second=t;
        }
        for(int i=2;i<a.length;i++){
            int curr=a[i];
            if(curr>max){
                second=max;
                max=curr;
            }else if(curr<second){
                continue;
            }else{
                second=curr;
            }
        }
        return  second;
    }

二。数组排序

1.1   BigO表示法

测算时间复杂度。 O(n)

1.1.1  O(1)

int[] a={1,2,3,4,5};
a[2];

1.1.2  O(n)

int[] a={1,2,3,4,5};
        for(int i=0;i<a.length;i++){
            if(a[i]==5){
                System.out.println(a[i]);

1.1.3  O(n*n)

空间复杂度稳定的

 int[] a={1,2,3,4,5};
        for(int i=0;i<a.length;i++){
            for(int j=0;j< a.length;j++){
                if(a[i]==5){
                    System.out.println(a[i]);

2.冒泡排序法

 核心

数组中相邻两项比较,交换

 public static void sort(int[] a) {
        int count=0;
        for (int i = 0; i < a.length; i++) {

            boolean f = true; // 有序的开关
            for (int j=0;j< a.length-i-1;j++){//-1防止越界
                count++;
                if(a[j]>a[j+1]){  //当前项大于下一项
                    f=false;
                    int tmp=a[j];
                    a[j]=a[j+1];
                    a[j+1]=tmp;
                }
            }
            if(f)  break;
        }
        System.out.println("count="+count);
    }

3.选择排序

核心

一次循环找出最大、最小值

 public static void sort(int[] a) {
        for (int i = 0; i < a.length; i++) {
            int min = a[i];
            int pos = i;
            for (int j = i + 1; j < a.length; j++) {
                if (min > a[j]) { //不是最小值
                    min = a[j];
                    pos = j;  //j是最小值位置
                }
            }
            //找到最小值之后进行交换
            a[pos] = a[i];
            a[i] = min;
        }
    }

4.插入排序法

public static void insertionSort(int[] arr) {
        int n = arr.length;
        for (int i = 1; i < n; i++) {
            int key = arr[i];
            int j = i - 1;

            while (j >= 0 && arr[j] > key) {
                arr[j + 1] = arr[j];
                j = j - 1;
            }
            arr[j + 1] = key;
        }
    }

三。数组辅助类Arrays

1 数组转换为字符串

Arrays.toString(数组)---》字符串

System.out.println(Arrays.toString(a));

2.排序

sort(a, from, end), [from, end]

3.数组填充值

fill(a,要填充的值)

4.数组拷贝

copyfy

5.binarysearch 二分查找 

前提:有序

6.数组中数据删除问题

System.arraycopy(a, 3, a, 2, 2);

四。多维数组

java的多维数组本质: 一维数组。

看做一张表,行-列 坐标

二维数组: 二维数组中的元素是一个一维数组

int[][] a = new int[5][]; (√)

int[][] a = new int[][5]; (x)

案例:产生一个5x5二维数组,随机在数组中填入黑白棋子,打印出棋盘

public static void main(String[] args) {
        Random random=new Random(System.currentTimeMillis());
        String[][] a=new String[5][5];
        String[] ball = {"●", "○"};
        for (int i=0;i<5;i++){
            for(int j=0;j<5;j++){
                a[i][j]= ball[random.nextInt(2)];
                System.out.print(a[i][j]+"\t");
            }
            System.out.println();
        }

;