java

位置:IT落伍者 >> java >> 浏览文章

Java静态与动态数组特点分析


发布日期:2022年03月13日
 
Java静态与动态数组特点分析

平常我们接触到的大多都是静态数组其实在很多的时候静态数组根本不能满足我们编程的实际需要比方说我需要在程序运行过程中动态的向数组中添加数据这时我们的静态数组大小是固定的显然就不能添加数据要动态添加数据必须要用到动态数组动态数组中的各个元素类型也是一致的不过这种类型已经是用一个非常大的类型来揽括Object类型Object类是JAVALANG包中的顶层超类所有的类型都可以与Object类型兼容所以我们可以将任何Object类型添加至属于Object类型的数组中能添加Object类型的的集合有ArrayListVector及LinkedList它们对数据的存放形式仿造于数组属于集合类下面是他们的特点

同步性

ArrayListLinkedList是不同步的而Vestor是的所以如果要求线程安全的话可以使用ArrayList或 LinkedList可以节省为同步而耗费开销但在多线程的情况下有时候就不得不使用Vector了当然也可以通过一些办法包装 ArrayListLinkedList使他们也达到同步但效率可能会有所降低

数据操作效率

ArrayList和Vector中从指定的位置(用index)检索一个对象或在集合的末尾插入删除一个对象的时间是一样的可表示为 O()但是如果在集合的其他位置增加或移除元素那么花费的时间会呈线形增长O(ni)其中n代表集合中元素的个数i代表元素增加或移除元素的索引位置为什么会这样呢?以为在进行上述操作的时候集合中第i和第i个元素之后的所有元素都要执行(ni)个对象的位移操作LinkedList 中在插入删除集合中任何位置的元素所花费的时间都是一样的O()但它在索引一个元素的时候比较慢为O(i)其中i是索引的位置

容量扩充性

从内部实现机制来讲ArrayList和Vector都是使用Objec的数组形式来存储的当你向这两种类型中增加元素的时候如果元素的数目超出了内部数组目前的长度它们都需要扩展内部数组的长度Vector缺省情况下自动增长原来一倍的数组长度ArrayList是原来的%所以最后你获得的这个集合所占的空间总是比你实际需要的要大所以如果你要在集合中保存大量的数据那么使用Vector有一些优势因为你可以通过设置集合的初始化大小来避免不必要的资源开销

所以如果只是查找特定位置的元素或只在集合的末端增加移除元素那么使用Vector或ArrayList都可以如果是对其它指定位置的插入删除操作最好选择 LinkedListArrayList 和Vector是采用数组方式存储数据此数组元素数大于实际存储的数据以便增加和插入元素都允许直接序号索引元素但是插入数据要设计到数组元素移动等内存操作所以索引数据快插入数据慢Vector由于使用了synchronized方法(线程安全)所以性能上比ArrayList要差LinkedList使用双向链表实现存储按序号索引数据需要进行向前或向后遍历但是插入数据时只需要记录本项的前后项即可所以插入数度较快

上一篇:java连接mysql数据库乱码的解决方案

下一篇:Servlet与JSP间的传值问题