当前位置:网站首页 > Java基础 > 正文

java基础之数组



1. 数组的基本概念

     1.1 什么是数组?

                可以看成是相同类型元素的一个集合。在内存中是一段连续的空间。相当于一个车库.

                由此我们可以看出:

                1. 数组中存放的元素其类型相同

                2. 数组的空间是连在一起的

                3. 每个空间有自己的编号,其实位置的编号为0,即数组的下标。

        1.2 数组的创建方式

                1.2.1 数组的创建

                        数据类型[] 数组名 = new java基础之数组 数据类型[数组长度]

                1.2.2 数组创建的三种方式

 

              1.2.3 遍历数组的俩种方式

                        补充:数组名.length是求数组的长度

 

                1> 单纯使用for

 

                2> 使用for each

 

2. 数组是引用类型

        2.1 初始JVM的内分部

                2. 程序运行产生的中间数据要存放在内存

                3. 程序中的常量也要保存

                4. 有些数据可能需要长时间存储,而有些数据当方法运行结束后就要被销毁

        如果对内存中存储的数据不加区分的随意存储,那对内存管理起来将会非常麻烦。比如:

                因此JVM对于使用的内存按照功能进行了划分

  • 程序计数器 (PC Register): 只是一个很小的空间, 保存下一条执行的指令的地址
  • 虚拟机栈(JVM Stack): 与方法调用相关的一些信息,每个方法在执行时,都会先创建一个栈帧,栈帧中包含有:局部变量表、操作数栈、动态链接、返回地址以及其他的一些信息,保存的都是与方法执行时相关的一些信息。比如:局部变量。当方法运行结束后,栈帧就被销毁了,即栈帧中保存的数据也被销毁了。
  • 本地方法栈(Native Method Stack): 本地方法栈与虚拟机栈的作用类似. 只不过保存的内容是Native方法的局部变量. 在有些版本的 JVM 实现中(例如HotSpot), 本地方法栈和虚拟机栈是一起的
  • 堆(Heap): JVM所管理的最大内存区域. 使用 new 创建的对象都是在堆上保存 (例如前面的 new int[]{1, 2, 3} ),堆是随着程序开始运行时而创建,随着程序的退出而销毁,堆中的数据只要还有在使用,就不会被销毁。
  • 方法区(Method Area): 用于存储已被虚拟机加载的类信息、常量、静态变量、即时编译器编译后的代码等数据. 方法编译出的的字节码就是保存在这个区域

        2.2 基本类型变量和引用类型变量的区别

        基本数据类型创建的变量,称为基本变量,该变量空间中直接存放的是其所对应的值;

        引用数据类型创建的变量,一般称为对象的引用,其空间中存储的是对象所在空间的地址;

 

        在上述代码中,a、b、arr,都是函数内部的变量,因此其空间都在main方法对应的栈帧中分配。a、b是内置类型的变量,因此其空间中保存的就是给该变量初始化的值。array是数组类型的引用变量,其内部保存的内容可以简单理解成是数组在堆空间中的首地址

从上图可以看到,引用变量并不直接存储对象本身,可以简单理解成存储的是对象在堆中空间的起始地址。通过该地址,引用变量便可以去操作对象。


        2.3 再谈引用变量

 

如下图所视:

        2.4 认识null

                null在java中表示"空引用",一个不指向对象的引用

 

3.数组的应用场景

        3.1 作为函数的参数

                1. 参数传基本类型

 

                2. 参数传数组类型

 

        3.2 作为函数的返回值

                比如:获取斐波那契数列的前N项

 

4. 数组练习

        4.1 把数组作为字符串进行输出和数组排序

                使用Arrays.toString(数组名)把数组作为字符串进行输出

                使用Arrays.sort(数组名)把数组进行排序

 

        4.2 判断俩个数组内容是否一致和填充数字

                        使用Arrays.equals(数组1,数组2)把数组1和数组2进行比较

                        使用Arrays.fill(数组名,填充数字)把数组进行数字填充

 

        4.3 数组的拷贝

                        使用Arrays.copyOf(要复制的数组名,数组长度)来对数组进行拷贝(返回一个新的数组)

 

        4.4 二分查找

                思想:以升序数组为例, 二分查找的思路是先取中间位置的元素, 然后使用待查找元素与数组中间元素进行比较:

                1. 如果相等,即找到了返回该元素在数组中的下标

                2. 如果小于,以类似方式到数组左半侧查找

                3. 如果大于,以类似方式到数组右半侧查找                   

 

        java内置的二分查找:

                Arrays.binarySearch(数组名,查找元素)

 

        4.5 冒泡排序

                思想: 假设排升序:

                1. 将数组中相邻元素从前往后依次进行比较,如果前一个元素比后一个元素大,则交换,一趟下来后最大元素就在数组的末尾

                2. 依次从上上述过程,直到数组中所有的元素都排列好

 

5. 二维数组

        二维数组本质上也就是一维数组, 只不过每个元素又是一个一维数组.

        基本写法:数据类型[][] 数组名称 = new 数据类型 [行数][列数] { 初始化数据 }

        注意: 二维数组名.length表示的是二维数组行的长度

                二维数组名[0].length表示的是二维数组第一行列的长度

                二维数组名[0]存的是第一行一维数组的首个元素的地址

 

版权声明


相关文章:

  • java线程基础书籍2024-11-09 12:26:04
  • java基础案例多功能手机2024-11-09 12:26:04
  • java基础视频马士兵2024-11-09 12:26:04
  • 28岁0基础学java找工作2024-11-09 12:26:04
  • 0基础学java 知乎2024-11-09 12:26:04
  • java基础程序设计ppt2024-11-09 12:26:04
  • java基础代码写日历2024-11-09 12:26:04
  • 乐山java基础中心2024-11-09 12:26:04
  • java集合基础面试题2024-11-09 12:26:04
  • java面试基础框架2024-11-09 12:26:04