数组(一)

数组

一、概念

  • 数组可以批量有序存储数据

  • 数组本身是一种引用数据类型,理解成一个容器

语法:

  • int[] arr = new int[5]

  • 数据类型[] 数组名称 = new 数据类型前后一致int[数据长度]

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

    • 数据类型[] 数组名 = {值1,值2,值3};

     

  • int[] arr;

  • arr={1,3,2,4}

    • 数据类型[] 数组名;

    • 数组名 = {值1,值2,值3};

package com.JavaSE.homework.Day12.DemoArr1;
​
public class Arr {
    public static void main(String[] args) {
        int[] arr1=new int[4];//length   数组的长度  是一个整型int
        int[] arr2={1,3,2,4};
        for (int i=0;i<arr1.length;i++){
            arr1[i]=arr2[arr2.length-i-1];
            System.out.println(arr1[i]);
​
        }
    }
}

  • 数组的默认值

    • int[] arr=new int[3];

    • inta;---默认0

创建自定义对象时,成员变量不赋值,都在堆中有相应的默认值

数组也是在堆内存创建对象,所以也有默认值

package com.JavaSE.homework.Day12.DemoArr2;
​
public class Arr2 {
    public static void main(String[] args) {
        int[] arr=new int[3];
        System.out.println(arr[0]);//0
        String[] arr2=new String[3];
        System.out.println(arr2[1]);//null
    }
}

总结:

  1. 数组的写法两种(第二种又可以分为两小种)

  2. 数组的length

  3. 数组的索引(0~length)

  4. 数组的默认值(和里面存放的数据有关)

二、数组遍历

把数组中存放的数据,一次性取出

package com.JavaSE.homework.Day12.DemoArr1;
​
public class Arr {
    public static void main(String[] args) {
        int[] arr1=new int[4];
        int[] arr2={1,3,2,4};
        for (int i=0;i<arr1.length;i++){//索引遍历
            arr1[i]=arr2[i];
            System.out.println(arr1[i]);
        }
        for (int i:arr2){//增强for遍历
            System.out.println(i);
        }
    }
}

两种遍历:根据索引遍历(重点) 增强for遍历

三、数组的扩容问题

数组的存储特性

  • 数组一旦创建,容量就固定不变(例如生产一个杯子,容量500ml)

堆中的内存不可更改,虽然本来的数组的内存不能扩容,我们可以用这个数组名重新引用一个新的地址,并把值重新赋值,以此达到扩容的目的

package com.JavaSE.homework.Day12.DemoArr3;
​
public class Arr3 {
    public static void main(String[] args) {
        int[] arr1={1,5,3,4};
        int expand=2;//扩容的容量
        int[] arr2=new int[arr1.length+expand];
        for (int i=0;i<arr1.length;i++){
            arr2[i]=arr1[i];
            System.out.println(arr2[i]);
        }
        for (int m=arr2.length-1;m>=arr1.length;m--){
            arr2[m]=100;//扩容数值的字面量
            System.out.println(arr2[m]);
        }
    }
}

四、数组应用

1.求数组所有数据的和?

2.求平均值?

package com.JavaSE.homework.Day12.DemoPractice;
​
public class Practice1 {
    public static void main(String[] args) {
        int[] arr1 = {1, 2, 3, 4, 5};
        int sum = 0;
        int ave = 0;
        for (int i = 0; i < arr1.length; i++) {
            sum += arr1[i];
            ave = sum / arr1.length;
        }
        System.out.println(sum);
        System.out.println(ave);
    }
}

3.一个数组中放入1到100?

package com.JavaSE.homework.Day12.DemoPractice;
​
public class Practice2 {
    public static void main(String[] args) {
        int[] arr1 = new int[100];
        for (int i = 0; i < arr1.length; i++) {
            arr1[i]=i+1;
            System.out.println(arr1[i]);
        }
    }
}

4.倒序遍历?和 放入新的数组中?

package com.JavaSE.homework.Day12.DemoPractice;
​
public class Practice3 {
    public static void main(String[] args) {
        int[] arr1 = {1, 2, 3, 4, 5};
        int[] arr2 = new int[5];
        int j = 0;
        for (int i = arr1.length-1; i >= 0; i--,j++) {
            arr2[j] = arr1[i];
            System.out.println(arr2[j]);
        }
        for (int m:arr2){//遍历输出
            System.out.println(m);
        }
    }
}

5.数组的交换{1,2,3 ,0,7,8,9 } 变成 {9,8,7,0,3,2,1}

package com.JavaSE.homework.Day12.DemoPractice;
​
public class Practice4 {
    public static void main(String[] args) {
        int[] arr1 = {1, 3, 7, 4, 88};
        int[] arr2 = {2, 34, 2, 6, 856};
        int j;
        for (int i = 0; i < arr1.length; i++) {
            j = arr1[i];
            arr1[i] = arr2[i];
            arr2[i] = j;
        }
        for (int m : arr1) {
            System.out.println(m);
        }
        for (int n : arr1) {
            System.out.println(n);
        }
    }
}

6.最值

package com.JavaSE.homework.Day12.DemoPractice;

public class Practice5 {
    public static void main(String[] args) {
        int[] arr1 = {3, 34, 2, 856, 86};
        int max=arr1[0];
        int min=arr1[0];
        for (int i = 0; i < arr1.length-1; i++) {
            if (max < arr1[i + 1]) {
                max=arr1[i + 1];
            }
            if (min > arr1[i + 1]) {
                min=arr1[i + 1];
            }
        }
        System.out.println(max);
        System.out.println(min);
    }
}

7.求索引,给一个元素5,它在数组{3456, 345, 23, 5, 8136}中的索引是多少?

package com.JavaSE.homework.Day12.DemoPractice;

public class Practice6 {
    public static void main(String[] args) {
        int[] arr1 = {3456, 345, 23, 5, 8136};
        for (int i = 0; i < arr1.length - 1; i++) {
            if (arr1[i]==5) {
                System.out.println(i);
            }
        }
    }
}

8.数组是可以放入重复元素的,数组去重问题!(不包括0)

{12,4,4,3,3,6,5,6}

判断一个元素在某个数组中是否存在?

package com.JavaSE.homework.Day12.DemoPractice;

public class Practice7 {
    public static void main(String[] args) {
        int[] arr1 = {345, 345, 23, 5, 23,6};
        int[] arr2 = new int[arr1.length];
        boolean flag=true;
        for (int i = 0; i < arr1.length; i++) {//i为第一个比较数,j是第二个比较数
            for (int j = 0; j < arr1.length; j++) {//i和j索引不同时如果值相等则为重复,索引相等则是比较本身
                if (i != arr1.length-1-j && arr1[i] == arr1[arr1.length-1-j]) {
                    flag=false;//重复标记false,不赋值给arr2
                }
            }
            if (flag){
                save(arr2,i,arr1[i]);
            }
            flag=true;//每次i的一轮比较完要初始flag,不然下次没重复也不放入arr2
        }
        for (int s : arr2) {//遍历输出
            System.out.println(s);
        }
    }
    public static void save(int[] arr2,int a,int b){
        arr2[a]=b;//放入arr2
    }
}

五、二维数组

把一维数组作为元素,放入到二维数组中

语法:

int [] [] arr={{1,2,5},{,6,9},{123,45}}

数据类型怕[] [] 二维数组名(变量)=new 数据类型[二维数组长度] [一维数组长度];

数据类型[] [] 二维数组名(变量)={{12,3,5},{55,33},{10,20}};

posted @ 2019-10-19 20:56  Wollf  阅读(111)  评论(0)    收藏  举报