龙空技术网

Java数据结构(不仅限于Java)——数组

写代码写出光 149

前言:

而今各位老铁们对“java数组类型”大致比较关怀,看官们都需要了解一些“java数组类型”的相关知识。那么小编同时在网摘上收集了一些对于“java数组类型””的相关文章,希望朋友们能喜欢,你们快快来了解一下吧!

我们学习一门新的语言,在入门的阶段更多的是学习语法、函数、数值计算(加、减、乘、除、求模、求余、位运算)、条件控制,随着深入会涉及到数据临时缓存,单条数据我们可能通过全局变量(常量)、类(结构体)。那么对于同一类数据集合,我们要怎么来进行缓存以及操作呢?这里我们就需要使用数据结构

数据结构也就是 Data Structure,是一种存储数据的结构体。是在非数值计算的程序设计问题中研究计算机的操作对象及其相互关系、运算等的学科,是计算机应用相关基础必备的技能。

Java是目前流行的纯面向对象的设计语言之一,后续章节主要使用Java语言,以充分运用其面向对象的思想来有效的组织和应用集合、线性结构、树形结构、图形结构等数据对象。

数组概念

数组是应用最广泛的数据存储结构。在我们熟知的基本全部编程语言中都有数组。

数组是一种线性数据结构,是一个使用连续的内存空间存放相同的数据类型的集合容器,与其他容器相比,数组的区别主要在于性能与保存基本类型的能力。

在Java中,数组是一种效率最高的存储和随机访问对象的方式,通过寻址公式,随机访问的时间复杂可以达到O(1),但是为了保持空间的连续性,在数组中插入、删除数据时,都需要移动后面数据,该操作的时间复杂度为O(n)。另外,由于空间上连续,所以数组对CPU缓存比较友好,借助CPU的缓存机制,预读数组中的数据,提高访问效率。但是,由于数组是定长的,一旦声明之后就不可以改变长度,所以如果长度声明过大或者过小都会造成问题。

数组可以自动给数组中的元素从0开始编号,方便操作这些元素。数组属于引用变量,并且数组的长度是固定的。数组的使用有四个步骤:声明数组,分配空间,赋值,处理。

数组创建

数组创建方式:

元素类型[] 数组名 = new 元素类型[元素个数或数组长度];元素类型[] 数组名 = new 元素类型[]{元素,元素,……};元素类型[] 数组名 = {元素,元素,……};

int[] arr = new int[5];//创建数组第一种方式,此时默认值都是为0arr[0] = 1;//数组的初始化arr[1] = 2;//数组的初始化 int[] arr = new int[]{3,5,1,7};//第二种方式:创建并初始化数组 int[] arr = {3,5,1,7};//第三种方式:创建并初始化数组
数组内存分析

栈内存:在函数中定义的一些基本类型的变量和对象的引用变量都是在函数的栈内存中分配。当在一段代码块中定义一个变量时,java就在栈中为这个变量分配内存空间,当超过变量的作用域后,java会自动释放掉为该变量分配的内存空间。

堆内存:堆内存用于存放由new创建的对象和数组。在堆中分配的内存,由java虚拟机自动垃圾回收器来管理。在堆中产生了一个数组或者对象后,还可以在栈中定义一个特殊的变量,这个变量的取值等于数组或者对象在堆内存中的首地址,在栈中的这个特殊的变量就变成了数组或者对象的引用变量,以后就可以在程序中使用栈内存中的引用变量来访问堆中的数组或者对象,引用变量相当于为数组或者对象起的一个别名,或者代号。

引用变量是普通变量,定义时在栈中分配内存,引用变量在程序运行到作用域外释放。而数组&对象本身在堆中分配,即使程序运行到使用new产生数组和对象的语句所在地代码块之外,数组和对象本身占用的堆内存也不会被释放,数组和对象在没有引用变量指向它的时候,才变成垃圾,不能再被使用,但是仍然占着内存,在随后的一个不确定的时间被垃圾回收器释放掉。这个也是java比较占内存的主要原因,实际上,栈中的变量指向堆内存中的变量,这就是 Java 中的指针!

数组内存模型

二维数组

二维数组定义:数组类型[][] 数组名 = new 数组类型[一维数组的个数][每一个一维数组中元素的个数]。

二维数组内存模型

标签: #java数组类型