java集合总结

时间:2024.4.30

(3)数据增长性

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

(4)使用模式

在ArrayList和Vector中,从一个指定的位置(通过索引)查找数据或是在集合的末尾增加、移除一个元素所花费的时间是一样的,这个时间我们用O(1)表示。但是,如果在集合的其他位置增加或移除元素那么花费的时间会呈线形增长:O(n-i),其中n代表集合中元素的个数,i代表元素增加或移除元素的索引位置。为什么会这样呢?以为在进行上述操作的时候集合中第i和第i个元素之后的所有元素都要执行位移的操作。这一切意味着什么呢?

这意味着,你只是查找特定位置的元素或只在集合的末端增加、移除元素,那么使用Vector或ArrayList都可以。如果是其他操作,你最好选择其他的集合操作类。比如,LinkList集合类在增加或移除集合中任何位置的元素所花费的时间都是一样的—O(1),但它在

索引一个元素的使用缺比较慢-O(i),其中i是索引的位置.使用ArrayList也很容易,因为你可以简单的使用索引来代替创建iterator对象的操作。LinkList也会为每个插入的元素创建对象,所有你要明白它也会带来额外的开销。

最后,在《Practical Java》一书中Peter Haggar建议使用一个简单的数组(Array)来代替Vector或ArrayList。尤其是对于执行效率要求高的程序更应如此。因为使用数组(Array)避免了同步、额外的方法调用和不必要的重新分配空间的操作.

备注:

Array 是普通数组,容量不可变,不在集合类包里

Vector 是容量可变的数组

List Set Map 都是接口

ArrayList,LinkedList 都是 List接口的实现,和数组基本差不多,可用操作比数组多

Map 存放的是键-值对 用键做索引

七、其它

ArrayList 实现List接口 ,随着向 ArrayList 中不断添加元素,其容量也自动增长

Vector向量

HashMap实现Map接口--可以说内存就是一个HashMap

HashTable实现一个哈希表,该哈希表将键映射到相应的值

Set一个不包含重复元素的容器

HashMap, HashTable都是“Key-Value对”形式的

①Vector和ArrayList区别

 Vector和ArrayList Vector和ArrayList在使用上非常相似,都可用来表示一组数量可变的对象应用的集合,并且可以随机地访问其中的元素。

 Vector的方法都是同步的(Synchronized),是线程安全的(thread-safe),而ArrayList的方法不是,由于线程的同步必然要影响性能,因此,ArrayList的性能比Vector好。当Vector或ArrayList中的元素超过它的初始大小时,Vector会将它的容量翻倍,而ArrayList只增加50%的大小,这样,ArrayList就有利于节约内存空间。

②Hashtable和HashMap的区别

Hashtable和HashMap它们的性能方面的比较类似 Vector和ArrayList,比如Hashtable的方法是同步的,而HashMap不是。

③ArrayList和LinkedList的区别

对于处理一列数据项,Java提供了两个类ArrayList和LinkedList, ArrayList的内部实现是基于内部数组Object[], 所以从概念上讲,它更象数组,但LinkedList的内部实现是基于一组连接的记录,所以,它更象一个链表结构,所以,它们在性能上有很大的差别。

从上面的分析可知,在ArrayList的前面或中间插入数据时,你必须将其后的所有数据相应的后移,这样必然要花费较多时间,所以,当你的操作是在一列 数据的后面添加数据而不是在前面或中间,并且需要随机地访问其中的元素时,使用ArrayList会提供比较好的性能

而访问链表中的某个元素时,就必须从链表的一端开始沿着连接方向一个一个元素地去查找,直到找到所需的元素为止,所以,当你的操作是在一列数据的前面或中间添加或删除数据,并且按照顺序访问其中的元素时,就应该使用LinkedList了。

如果在编程中,1,2两种情形交替出现,这时,你可以考虑使用List这样的通用接口,而不用关心具体的实现,在具体的情形下,它的性能由具体的实现来保证。

配置集合类的初始大小

在Java集合框架中的大部分类的大小是可以随着元素个数的增加而相应的增加的,我们似乎不用关心它的初始大小,但如果我们考虑类的性能问题时,就一定要考虑尽可能地设置好集合对象的初始大小,这将大大提高代码的性能。

比如,Hashtable缺省的初始大小为101,载入因子为0.75,即如果其中的元素个数超过75个,它就必须增加大小并重新组织元素,所以,如果你 知道在创建一个新的Hashtable对象时就知道元素的确切数目如为110,那么,就应将其初始大小设为110/0.75=148,这样,就可以避免重 新组织内存并增加大小。

 5

更多相关推荐:
java集合类

Java中集合类简介收藏importjava.util.*;publicclassTestset{publicstaticvoidmain(Stringargs[]){Setset=newHashSet();s…

java实训收获总结

尊敬的各位领导、各位老师、各位同学:大家好!在学院领导老师的带领和安排下,我们在上个学期末,到北京进行了为期10天的专业实习。在实习过程中,我们在专编程技能以及软件开发的总体架构思想上都收获颇丰。本次实训我们分…

java web总结

JavaWeb总结1.JSP运行原理(1)用户通过客户端浏览器向服务器发送请求。(2)JSP文件将JSP引擎编译成Java的class文件,即servlet。(3)将产生的servlet加载到内存执行。(4)S…

Java总结

Java实验1.调试HelloWorld程序2.this,super,get,set,把课本90页程序4.7中的name改成私有变量3.继承,重写,父类引用指向子类对象4.验证数组Arrays类和Collect…

java总结1

1、一个“.java”源文件中可以包含多个类,但只能包含一个public类,且必须与文件名相一致名。2、goto是java中的保留字,现在没有在java中使用。3、&和&&相同点:都是逻辑与运算符,当两边的表达…

java总结-20xx-12-7

一、面向对象的语言特性:封装,多态,继承二、hashtable和hashmap的区别:hashtable是dictionary的子类,hashmap是map接口中的一个实现类hashtable中的方法是同步的,…

Java格式总结

Java定义格式:1、数据类型的强制性转换语法:(欲转换的数据类型)变量名称;2、if语句的格式:if(条件判断)语句;3、if语句的格式:if(条件判断){语句1;语句2;…语句3;}4、if…else语句的…

java实训个人总结

实训总结短短的一个月很快就过去了,在这短短的一个月里,我学到了很多,了解了很多。在这一个月里我学到了有关JAVA等方面的知识,了解了关于软件开发的流程。了解了自己的不足,知道了自己努力的方向。回顾这次的实训,这…

java总结

调用父类构造方法?在子类的构造方法中可使用super(argument_list)语句调用父类的构造方法?如果子类的构造方法中没有显示地调用父类构造方法,也没有使用this关键字调用重载的其它构造方法,则系统默…

java项目总结

项目总结这是一次比较完整的团队合作项目,它要求团队各成员对系统的主体设计搭成一定的共识,这包括数据库设计,需求分析,以及其它一些细节,因此在编码之前的准备工作一定要充分。在设计之前,我们两组对于数据库的设计进行…

java学习总结

JAVA论文姓名:耿岩班级:信学号:09220xx314202Java学习总结Java有三个体系,JavaSE、JavaME、JavaEE。JavaSE是桌面应用;JavaME属于企业级应用,用于网络编程,是对…

Java总结

Java总结一.1.Java程序的执行Java先由.Java文件编译生成.class文件,再由.class文件通过不同操作系统的虚拟机进行解释从而执行程序结果。编译命令:javac+文件名.Java解释命令:j…

java集合总结(31篇)