首页 > 其他分享 >动力节点—day05

动力节点—day05

时间:2022-10-27 16:49:00浏览次数:42  
标签:动力 初始化 int 元素 day05 数组 100 内存地址 节点

  • 数组
    • Java语言当中的数组是一种引用数据类型,不属于基本数据类型,数组的父类是Object
    • 数组实际上是一个容器,可以同时容纳多个元素(数组是一个数据集合),多个数据元素的类型必须是一致的
    • 数组当中可以存储基本数据类型的数据,也可以存储引用数据类型的数据
    • 数组因为是引用数据类型,所以数组对象是在对内存当中
    • 数组当中存储引用数据类型的话,实际上存储的的是Java对象的内存地址,不能直接存储Java对象
    • 数组一旦创建,在java中规定,长度不可变
    • 数组分类:一维数组、二位数组、三维数组、多维数组.......
    • 所有数组都有length属性,用来获取数组中元素的个数
    • 数组中每个元素都是由下标的,用来进行存取,下标从0开始,以1递增,最后一个元素的下标是length-1
    • 数组在内存方面存储的时候,数组中元素内存地址是连续的,所有数组都是拿第一个小方框的内存地址作为整个数组对象的内存地址
    • 数组数据结构的优点和缺点
      • 优点:
        • 查询/检索某个下标上的元素时效率极高,可以说是查询效率最高的一个数据结构
        • 为什么检索效率高?
        • 第一:每一个元素的地址在空间上是连续的
        • 第二:每一个元素类型相同,所以占用空间大小一样
        • 第三:知道第一个元素的内存地址,知道每一个元素占用空间大小,又知道下标,所以通过第一个表达式就可以计算出某个下标上元素的内存地址,直接通过内存地址定位元素,所以数组的检索效率是最高的,所以无论一个数组有多少元素,检索效率都是一样的
      • 缺点
        • 第一:由于为了保证数组中每个元素的内存地址连续,所以在数组上随机增加或者删除的时候,效率低,因为随机增删元素会涉及到后面元素的统一向前或向后位移的操作(除了最后一个元素)
        • 第一:数组不能存储大数据量,为什么?因为很难找到一块特别大的连续的内存空间
    • 一维数组
      • 声明/定义一个一维数组?
        • 语法格式:int[] array1   或    int[] array1=new int[]{10,20,30};
      • 初始化一维数组(两种方式)
        • 静态初始化:int[] array={100,200,100,400};
        • 动态初始化:int[] array=new int[5];//初始化一个5个长度的一维数组,并且每个元素默认值0
      • 如果访问的元素超出了某个数组的范围,会发生ArrayIndexOutOfBoundsException数组下标越界异常
      • 什么时候采用动态初始化方式,什么时候采用静态初始化方式:
        • 当创建数组的时候,确定数组中存储了哪些元素,采用静态初始化方式
        • 当创建数组的时候,不确定数组中存储了哪些元素,采用动态初始化方式
      • 静态初始化的形式参数不能是{10,20,30},必须写成new int[]{10,20,30}
      • main方法
        • 是程序员负责写出来,JVM负责调用,JVM调用的时候会传入一个String类型的数组,JVM默认传递过来的数组长度为0,所以args不是null
        • 如果这样运行程序,java ArrayTets abc def xyz,那么这个时候JVM会自动将abc def xyz通过空格方式进行分离,分离完成之后,自动放到String[] args数组当中
        • 传递参数的位置:Run—>Run Configurations—>Arguments—>Program arguments
        • 在Dos窗口中:D:\>java Test abc def xyz
      • 在判断两个字符串是否相等,需要使用equals方法,username.equals("admin"),如果修改为"admin".equals(username)能够避免空指针异常
      • 数组的扩容:
        • java中对数组的扩容是先创建一个大容量的数组,然后将小容量的数据一个个拷贝到大数组当中
        • System.arrayCopy(原数组,原数组下标开始位置,目标数组,目标数组下标开始位置,扩容几个)
    • 二维数组
      • 二维数组其实是一个特殊的一维数组,特殊在这个一维数组中每一个元素是一个一维数组,
      • eg:int[][] array2={{100,200,300},{100,200,300,400,500},{100,200,300}};
      • 三维数组其实是一个特殊的二位数组,特殊在这个二维数组中每一个元素是一个二维数组
      • eg: int[][][] a = {{{1, 2}, {3, 4, 5},{3, 4, 5}}, {{6, 7}, {8, 9, 10, 11}}};
      • 二维数组的静态初始化
        • int[][] array2={{100,200,300},{100,200,300,400,500},{100,200,300}};
        • array2[0][0]表示第一个一维数组中的第一个元素
  • 常见算法:(以下算法在以后的Java实际开发中我们不需要使用的,因为Java已经封装好了,直接调用就行,只不过以后面试的时候,可能会有机会碰上)
    • 排序算法:
      • 冒泡排序算法(大气泡先出去)
      • 选择排序算法
        • 每一次从这堆“参与比较的数据当中”找最小值,拿着这个最小值和“参与比较的数据中最前面的”交换位置
        • 选择排序比冒泡排序好在,每一次的交换都有意义
        • 两个比较次数不变,但交换次数减少
    • 查找算法
      • 也可以不用算法,一个一个挨着找,知道找到为止
      • 二分法查找,这个效率高,数组中出现相同的元素,不一定找的是第一个
    • 算法实际上在Java中不需要精通,因为java已经封装好了,要排序调用方法就行,例如,Java中提供了一个数组工具类java.util.Arrays,其中有一个sort方法,可以排序,静态方法,直接使用类名调用就行,eg:折半查找Arrays.binarySearch(arr,5);

标签:动力,初始化,int,元素,day05,数组,100,内存地址,节点
From: https://www.cnblogs.com/wei-xin-yuan/p/16826263.html

相关文章