Java静态与动态数组特点分析
发布时间:2025-05-22 17:26:06 发布人:远客网络
一、Java静态与动态数组特点分析
1、平常我们接触到的大多都是静态数组其实在很多的时候静态数组根本不能满足我们编程的实际需要比方说我需要在程序运行过程中动态的向数组中添加数据这时我们的静态数组大小是固定的显然就不能添加数据要动态添加数据必须要用到动态数组动态数组中的各个元素类型也是一致的不过这种类型已经是用一个非常大的类型来揽括 Object类型 Object类是JAVA LANG包中的顶层超类所有的类型都可以与Object类型兼容所以我们可以将任何Object类型添加至属于Object类型的数组中能添加Object类型的的集合有ArrayList Vector及LinkedList它们对数据的存放形式仿造于数组属于集合类下面是他们的特点
2、 ArrayList LinkedList是不同步的而Vestor是的所以如果要求线程安全的话可以使用ArrayList或 LinkedList可以节省为同步而耗费开销但在多线程的情况下有时候就不得不使用Vector了当然也可以通过一些办法包装 ArrayList LinkedList使他们也达到同步但效率可能会有所降低
3、 ArrayList和Vector中从指定的位置(用index)检索一个对象或在集合的末尾插入删除一个对象的时间是一样的可表示为 O()但是如果在集合的其他位置增加或移除元素那么花费的时间会呈线形增长 O(n i)其中n代表集合中元素的个数 i代表元素增加或移除元素的索引位置为什么会这样呢?以为在进行上述操作的时候集合中第i和第i个元素之后的所有元素都要执行(n i)个对象的位移操作 LinkedList中在插入删除集合中任何位置的元素所花费的时间都是一样的 O()但它在索引一个元素的时候比较慢为O(i)其中i是索引的位置
4、从内部实现机制来讲ArrayList和Vector都是使用Objec的数组形式来存储的当你向这两种类型中增加元素的时候如果元素的数目超出了内部数组目前的长度它们都需要扩展内部数组的长度 Vector缺省情况下自动增长原来一倍的数组长度 ArrayList是原来的%所以最后你获得的这个集合所占的空间总是比你实际需要的要大所以如果你要在集合中保存大量的数据那么使用Vector有一些优势因为你可以通过设置集合的初始化大小来避免不必要的资源开销
二、关于java数组
1、前两种没有区别,就好像你是用左手拿杯子和谁还是用右手拿杯子喝水一样,希望不要纠结这种问题
2、最后一个与前面的有区别,int a= new int[5],表示初始化一个长度为5的数组,里面的元素都是0
3、而前面的数组是使用常量的方式初始化长度为5的数组,里面的元素是1,2,3,4,5
三、怎样用java定义一个int数组
数组:是一组相关变量的集合数组是一组相关数据的集合,一个数组实际上就是一连串的变量,数组按照使用可以分为一维数组、二维数组、多维数组
数据的有点不使用数组定义100个整形变量:int i1;int i2;int i3
数组定义:int i[100];只是一个伪代码,只是表示含义的
一维数组可以存放上千万个数据,并且这些数据的类型是完全相同的,
使用java数组,必须经过两个步骤,声明数组和分配内存给该数组,
声明一维数组:数据类型数组名[]=null;
非配内存给数组:数组名=new数据类型[长度];
声明一维数组:数据类型 []数组名=null;
int、long操作的时候本身就是具体的内容
引用传递的就是一个内存的使用权,一块内存空间,可能有多个人同时使用
数组的声明格式里,数据类型是数组元素的数据类型,常见的有整形、浮点型、与字符型等
数组名是用来统一这组相同数据类型元素的名称,其命名规则和变量的相同
数组声明后实际上是在栈内存中保存了此数组的名称,结下了是要在堆内存中配置数组所需要的内存,齐产固定是告诉编译器,所声明的数组要存放多少个元素,而new则是命令编译器根据括号里的长度。
基本数据类型偶读有其默认值:int 0;只要是引用数据类型默认值就是null事例
数据类型数组名[]=new数据类型[个数]
声明一个元素个数为10的整形数组score,同时开辟依靠内存空间工期使用
java中,由于整形数据类型占用的空间为4个byte,而整个数组score可保存的元素有10个。所以上例中占用的内存共有4*10=40个字节
想要访问数组里的元素可以利用索引来完成,java的数组索引标号由10开始,以一个score[10]的整形数组为例,score[0]代表第一个元素
在java中取得数组的长度(也就是数组元素的长度)可以利用数组名称.length完成,
数组名称.length--返回一个int类型的数据
之前的数组,所采用的都是动态初始化,所有的内容在数组声明的时候并不具体的指定,而是以默认值的形式出现
静态初始化是指在数组声明后直接为数组指定具体的内容
如果想要直接在声明的时候给数组赋初始值,可以采用大括号完成,只要在数组的生命格式后面加上初值的赋值即可,
数据类型数组名 []={初始值0,初始值1,初始值3,....初始值n};
范例排序,在操作中排序是比较常用的从大到小
这个时候不要被i值所迷惑if(score[i]>score[j]){
这一步主要知识为了比较,实际上完成之后输出的时候是根据j的值排序的
二维数组声明的方式和以为数组的类似,内存分配也一样是用new这个关键字
数组名=new数据类型[行的个数][列的个数];
数据类型数组名[][]=new数据类型[行的个数][列的个数];
声明二维数组score同时开辟一段内存空间
整体数据score可保存的元素是4*3=12个,在java中,int数据类型所占用的空间为4个字节,因此该整形数组占用的内存共为4*12=48个字节
用到的时候才会开辟空间,不用的(红色部分)则不开辟空间多维数组一般只是用到二维数组三维数组简单了解