arraylist linklist stack hashmap hashtable是我们经常能用到的集合类,关于他们之间的联系与区别是经常面试的必考题目,下面我们就来大致了解一下这几者之间的关系:
1、实现机制:
arraylist是基于数组实现的,可以用下标进行值的存取,默认的大小是10,也可以扩展其容量;linklist是基于链表结构实现的数据集合类,准确的说是采取的是双向链表结构;stack是基于栈结构实现的,即存在后进先出的存取顺序;hashmap和hashtable基于哈希表的map接口的实现类,其存储方式是键值对的形式,即key-value,两者在结构上的区别不大。
2、运行效率
这里我主要把运行效率分为访问效率(读取)和存取效率(增加删除操作),两者在不同的集合类上的效率是不同的,在arraylist中,由于是基于数组实现,所以在访问操作上是效率比linklist的效率高(访问第一个元素时不一定存在此结果),因为链表结构的集合类在访问时涉及从第一个元素开始遍历,直到找到目标元素,而数组结构可以直接读取数据。在存取效率上,arraylist要比linklist低(当数据增加在集合最后一个元素=之后事此结果不一定存在),因为数组结构的存取涉及元素的移动,而链表结构则直接在相应位置添加,再增加相应的地址指针就可以了。此外,hashmap和hashtable由于结构上的差距不,所以在效率上也不大。
3、同步性
arraylist和hashmap没有使用synchronized方法,即本身不自带同步(线程不安全),当我们需要使用同步时,需要自己外部给他同步,而vector和hashtable的方法是Synchronize的,在多个线程访问该集合对象时,线程安全。
4、其他
1 ) hashmap允许一个null的key、一个或者多个null的value,但hashtable不允许有null存在;
2)list类允许元素重复,但set类不允许元素重复;
3 ) HashMap把Hashtable的contains方法去掉了,改成containsvalue和containsKey
若有不对的地方,希望大神们多多指教。