九、JavaSE进阶之【数组】。

简介: 数组是同一种类型数据的集合;即能够存放多个相同类型的数据的容器。Java中,数组是一种引用类型,存储在堆中,父类为Object,一旦被创建长度是不可变的,元素类型必须统一。

第一章:基本概念


1.1基本性质


1.数组是同一种类型数据的集合;即能够存放多个相同类型的数据的容器。

2.Java中,数组是一种引用类型,存储在堆中,父类为Object,一旦被创建长度是不可变的,元素类型必须统一。


1.png


3.数组可以存储基本数据类型和引用数据类型的数据

4.数组中如果存的是Java对象的话,实际存储的是对象的引用(内存地址)。

5.数组分类:一维、二维、多维……。

6.所有的数组对象都有length属性,用于获取长度。

7.数组在内存方面存储时,数组中的元素内存地址是连续的

8.所有数组都是以第一个元素内存地址作为整个数组内存地址

9.下标从0开始,最后一个元素下标为length-1.


2.1 数组的优缺点


优点:检查某个下表上元素时效率高。


为什么检查效率高?


1.每一个元素内存地址空间上是连续的

2.每个元素类型相同所占空间大小一样

3.知道了元素内存地址,占空间大小,下标,可以计算元素的位置。


缺点:

1.由于数组每个元素内存地址连续,随机增删改效率太低。

2.数组不能存储大数据量,因为数组空间上很难找到一块大的内存空间。


第二章:一维数组


1.1基本语法


初始化一维数组:

静态初始化:int[] arry1={1,100,200};

动态初始化:int[] arrys=new int[5]; //初始化一个长度为5的int类型数组,每个元素值为0(默认).

String[] arrys=new String[6]; //初始化一个长度为6的String类型的数组,每个元素默认值为:null


1.png

2.png


代码演示:


int[] arr = new int[3];
arr[0] = 3; //给数组编号(角标)为0的空间中存放int类型的常量值3
System.out.println(arr[1]);//输出数组编号为1空间中的值。


public class Text{
    public static void main(String[] args) {
        //初始化一个静态类型的数组
        int[] arr1={2,5,8,9,6,};
        //访问第3个元素
        System.out.println(arr1[2]);
    }
}


一维数组的遍历:


public class Text{
    public static void main(String[] args) {
        //初始化一个静态类型的数组
        int[] arr1={2,5,8,9,6,};
        //遍历输出一维数组中的元素
        for (int i=0;i<arr1.length;i++){
            System.out.println(arr1[i]);
        }
    }
}


第三章:二维数组


1.1基本特性


1.二维数组是特殊的一维数组,二维数组中每个元素为一维数组。

2.二维数组初始化:


静态初始化: int[][] arry={{1,2,3},{1,2,3},{1,2,3}}

int[][] arr=new int[2][3];
arr[0][0]=11;


动态初始化:int[][] arrys=new int[2][3]; //初始化一个两行三列的二维数组


public class Text{
    public static void main(String[] args) {
        //初始化一个静态类型的二维数组
        int[][] arr1={{1,2,3},{1,2,3},{2,3,1}};
        //输出第1行第3列的元素
        System.out.println(arr1[0][2]);
    }
}


二维数组遍历:


public class Text{
    public static void main(String[] args) {
        //初始化一个静态类型的二维数组
        int[][] arr1={{1,2,3},{1,2,3},{2,3,1}};
           //遍历输出二维数组中的元素
        for (int i=0;i<arr1.length;i++){
            for(int j=0;j<arr1[i].length;j++){
                System.out.print(arr1[i][j]);//第i个一维数组中第j个元素
            }
        }
    }
}

第四章:数组常见异常总结


1.1数组角标越界异常


public class Demo10 {
    public static void main(String[] args) {
        int arr[] = new int[3];
        System.out.println(arr[3]);
    }
}


1.png

2.1数组空指针异常


public class Demo10 {
    public static void main(String[] args) {
        int arr[] = new int[3];
        //System.out.println(arr[3]);
        arr = null;
        System.out.println(arr[3]);
    }
}

2.png


数组工具类:Arrys.sort();//排序Arrys.binarySearch();//二分查找


第五章:简单练习


1.数组求和

public class Demo01 {
    public static int getSum(int []nums){
        int res = 0;// 求和结果
        int length = nums.length;// 获取长度
        for (int i =0;i<length;i++){
            res += nums[i];
        }
        return res;
    }
    // 数据类型... 形式参数 可变长度参数 就是数组
   /* public static int getSum1(int... nums){
        int res = 0;// 求和结果
        int length = nums.length;// 获取长度
        for (int i =0;i<length;i++){
            res += nums[i];
        }
        return res;
    }*/
    public static void main(String[] args) {
        int nums[] = {23,17,40,20};
        int sum = getSum(nums);
        System.out.println("数组的求和结果:"+sum);
    }
}


2.求最值

public class Demo02 {
    /**
     * 求数组最大值
     * @param nums
     * @return
     */
    public static int getMax(int nums[]){
        int max = nums[0];// 默认最大值为第一个元素
        for (int i = 1;i<nums.length;i++){// 遍历数组的每一位
            if (max<nums[i]){// 判断当前为是否比max大
                max = nums[i];// 用大值替换max值
            }
        }
        return max;
    }
    public static void main(String[] args) {
        int nums[] = {7,23,44,16,32,99,34,13};
        Arrays.sort(nums);
        //int max = getMaxIndex(nums);
        //System.out.println("最大值是:"+max);
        System.out.println(Arrays.toString(nums));
        System.out.println(nums[nums.length-1]);
    }
}
相关文章
|
4天前
|
存储 Java 索引
|
4天前
|
存储 Java 索引
|
4天前
|
安全 Java API
JavaSE 进阶-javase进阶(二)
JavaSE 进阶-javase进阶
37 0
|
4天前
|
存储 人工智能 算法
JavaSE 进阶-javase进阶(一)
JavaSE 进阶-javase进阶
48 0
|
4天前
|
安全 算法 Java
JavaSE 进阶-javase进阶(三)
JavaSE 进阶-javase进阶
42 0
|
4天前
|
存储 Java C语言
JavaSE之数组
JavaSE之数组
36 0
|
10月前
|
存储 Java 索引
【JavaSE专栏26】数组是什么?如何定义
【JavaSE专栏26】数组是什么?如何定义
|
10月前
|
存储 Java 数据挖掘
【JavaSE专栏29】多维数组是什么,和普通数组有什么区别?
【JavaSE专栏29】多维数组是什么,和普通数组有什么区别?
|
存储 机器学习/深度学习 算法
【JavaSE】数组的详解
本文讲解:数组的详解。
|
算法 Java
JavaSE:第五章:数组
JavaSE:第五章:数组
JavaSE:第五章:数组