数组的创建 | 内存解析

    技术2022-07-10  185

    目录

    一、数组1.数组的理解:2.数组相关的概念:3.数组的特点:4.数组的分类:5.数据结构:二、一维数组1.一维数组的声明与初始化2.一维数组元素的引用3.数组的属性:length4.一维数组的遍历5.一维数组元素的默认初始化值6.一维数组的内存解析 三、二维数组1.如何理解二维数组2.二维数组的声明与初始化3.如何调用二维数组元素4.二维数组的属性5.遍历二维数组元素6.二维数组元素的默认初始化值7.二维数组的内存结构 四、数组中设计的常见算法五、Arrays工具类的使用六、数组中的常见异常


    一、数组

    1.数组的理解:

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

    2.数组相关的概念:

    数组名 元素 角标、下标、索引 数组的长度:元素的个数

    3.数组的特点:

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

    4.数组的分类:

    ①照维数:一维数组、二维数组、。。。 ②照数组元素的类型:基本数据类型元素的数组、引用数据类型元素的数组。

    5.数据结构:

    1.数据与数据之间的逻辑关系:集合、一对一、一对多、多对多 2.数据的存储结构:

    线性表:顺序表(比如:数组)、链表、栈、队列树形结构:二叉树图形结构算法排序算法搜索算法

    二、一维数组

    1.一维数组的声明与初始化

    int num;//声明 num=10;//初始化 int id = 1001;//声明+初始化

    int[] ids;//声明 //1.1静态初始化:数组的初始化和数组元素的赋值操作同时进行 ids = new int[]{1001,1002,1003,1004}; //1.2动态初始化:数组的初始化和数组元素的赋值操作分开进行 String[] names = new String[5];

    int[] arr4 = {1,2,3,4,5};//类型推断

    2.一维数组元素的引用

    通过角标的方式调用。 数组的角标(或索引从0开始的,到数组的长度-1结束) name[0]= “zhangsan”; name[1]= “lisi”; name[2]= “wangsu”; name[3]= “sunliu”; name[4]= “jerry”;//charAt(0)

    3.数组的属性:length

    System.out.println(names.length()); 数组一旦初始化,其长度就是确定的,arr.length 数组长度一旦确定,就不可改变;

    4.一维数组的遍历

    for(int i =0;i<names.length;i++){ System.out.println(name[i]); }

    5.一维数组元素的默认初始化值

    数组元素是整型:0 数组元素是浮点型:0.0 数组元素是char型:0 或 ‘\u0000’ 数组元素是boolean型:false 数组元素是引用数据类型:null

    6.一维数组的内存解析

    三、二维数组

    1.如何理解二维数组

    数组属于引用数据类型。 数组的元素可以是引用数据类型。 一个一维数组A的元素如果还是一个一维数组类型的,则次数组A称为二维数组。

    2.二维数组的声明与初始化

    int[] arr =new int[]{1,2,3};//一维数组 //静态初始化 int[][] arr1 = new int[][]{{1,2,3},{4,5},{6,7,8}}; //动态初始化1 int[][] arr2 = new int[3][2]; //动态初始化2 int[][] arr3 = new int[3][]; //也是正确写法 int[] arr4[] = new int[][]{{1,2,3},{4,5,9,10},{6,7,8}}; int[] arr5[] = {{1,2,3},{4,5},{6,7,8}};

    3.如何调用二维数组元素

    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(arr3[0]);

    4.二维数组的属性

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

    5.遍历二维数组元素

    for (int i = 0; i < arr4.length; i++) { for (int j = 0; j < arr4[i].length; j++) { System.out.println(arr4[i][j]); } }

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

    规定:二维数组分为外层数组的元素,内层数组的元素

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

    7.二维数组的内存结构

    四、数组中设计的常见算法

    1.数组元素的赋值(杨辉三角、回形数等)

    2.求数值型数组中元素的最大值、最小值、平均数、总和等

    3.数组的复制、反转、查询(线性查找、二分查找)

    4.数组元素的排序算法(十大排序)

    选择排序 直接排序、堆排序 交换排序 冒泡排序、快速排序 插入排序 直接插入排序、折半插入排序,Shell排序 归并排序桶式排序基数排序

    排序算法性能比较

    五、Arrays工具类的使用

    java.util.Arrays:操作数组的工具类,里面定义了很多操作数组的方法

    public static void main(String[] args){ //判断两个数组是否相等 int[] arr1 = new int[] { 1,2,3,4 }; int[] arr2 = new int[] { 1,3,2,4 }; System.out.println(Arrays.equals(a, b));//false //输出数组信息 System.out.println(Arrays.toString(arr1)); //将指定值填充到数组之中 Arrays.fill(arr1,10); System.out.println(Arrays.toString(arr1));//[10,10,10,10] //对数组进行排序 Arrays.sort(arr2); System.out.println(Arrays.toString(arr2));//[1,2,3,4] //二分法查找 int arr3 = new int[]{-98,-34,2,34,66,79,106,210,333}; int index = Arrays.binarySearch(arr3,210); System.out.println(index); }

    六、数组中的常见异常

    一旦程序出现错误,程序就终止。

    public static void main(String[] args){ //1 数组角标越界的异常:ArrayIndexOutOfBoundsException int[] arr =new int[]{1,2,3,4,5}; for(int i = 0;i<= arr.length;i++){ System.out.println(arr[i]); } System.out.println(arr[-1]); //2 空指针异常:NullPointerException //情况一: int[] arr1 = new int[]{1,2,3}; arr1 = null; System.out.println(arr1[0]); //情况二: int[][] arr2 = new int[4][]; System.out.println(arr2[0][0]); //情况三: String[] arr3 = new String[]{"AA","BB","CC"}; arr3[0] = null; System.out.println(arr3[0].toString()); }

    好了,我亲爱的读者朋友,以上就是本文的全部内容了!!!

    觉得有点用记得给我点赞哦!

    通过坚持不懈地学习,持续不断地输出,你的编程基本功算得上是突飞猛进。

    为了帮助更多的程序员,专注于分享有趣的 Java 技术编程和有益的程序人生。一开始,阅读量寥寥无几,关注人数更是少得可怜。但随自己的不断努力,阅读量和关注人都在猛烈攀升。

    绝对不容错过,期待与你的不期而遇。

    Processed: 0.023, SQL: 8