?面试一个工作2年的朋友,问了一个集合相关的问题。说吧,请说说ArrayList、Vector、LinkedList的存储性能和特点。今天,我就和大家分享一下我对这个问题的理解。1.存储性能和特点关于ArrayList、Vector和LinkedList的存储性能和特点,我从以下三个方面来分析:(1)首先,ArrayList和Vector的底层使用数组来存储数据,两者都是取数据根据指数。这种设计使得取数据快而插入数据慢。另外,每次扩容都要移动数组中的元素,存储数据量大时会影响读写性能。(2)其次,由于Vector中的方法都是用synchronized修饰的,所以Vector中的数据操作都是线程安全的,但是性能比ArrayList差。(3)然后,LinkedList底层使用双向链表来存储数据,也就是说将内存中分散的内存单元通过附加引用关联起来,形成一个可以通过序号索引的线性结构.这种链式存储方式与数组的连续存储方式相比,内存利用率更高。LinkedList需要根据索引号向前或者向后遍历获取数据,但是在插入数据的时候只需要记录这个item的前后两个item,所以LinkedList插入数据的速度更快。(4)最后补充一点,Vector是Java早期版本提供的容器。它是一个遗留容器,不再被官方推荐。但是由于ArrayList和LinkedListed都是非线程安全的,所以在多线程环境下,可以使用工具类Collections的synchronizedList()方法将容器转换为线程安全的容器,以便复用。这其实就是装饰者模式的一个应用。2.关于遗留容器关于Java中的遗留容器,我要补充最后一件事。除了Vector,还有Hashtable、Dictionary、BitSet、Stack、Properties都是遗留容器。在这些容器中,Properties类存在严重的设计缺陷。看看这个源代码:/*Since:JDK1.0SeeAlso:native2asciitoolforSolaris,native2asciitoolforWindowsAuthor:ArthurvanHoff,MichaelMcCloskey,XuemingShen*/publicclassPropertiesextendsHashtable
