先了解一下数组和集合的区别
集合其实和数组一样都是java中提供的一种容器,可以用来存储多个数据。
既然集合和数组都容器,那么他们有什么区别呢?
a、数组的长度是固定的,集合的长度是可变的。
b、数组中存储的是同一类型的元素,可以存储基本数据类型值。
c、集合存储的都是对象。而且对象的类型可以不一致。在开发中一般当对象多的时候,使用集合进行存储。
1、ArrayList和LinkedList的异同
共性:ArrayList与LinkedList都是List接口的实现类,因此都实现了List的所有未实现的方法,只是实现的方式有所不同。
区别:List接口的实现方式不同
ArrayList实现了List接口,以数组的方式来实现的,因此对于快速的随机取得对象的查询需求,使用ArrayList实现执行效率上会比较好。
LinkedList是采用双链表的方式来实现List接口的,因此在进行insert、update和remove动作时效率要比ArrayList高。适合用来实现Stack(堆栈)与Queue(队列)。
2、HashMap和Hashtable的异同
共性:都实现了Map接口。
区别:
(1)继承的父类不同
Hashtable继承自Dictionary类,而HashMap继承自AbstractMap类。
(2)线程安全性不同
Hashtable的方法是Synchronize的,而HashMap中的方法在缺省情况下是非Synchronize的。
因此,HashMap更适合于单线程环境,而Hashtable适合于多线程环境。
一般现在不建议用HashTable, ①是HashTable是遗留类,内部实现很多没优化和冗余。②即使在多线程环境下,现在也有同步的ConcurrentHashMap替代,没有必要因为是多线程而用HashTable。
(3)提供contains方法
HashMap把Hashtable的contains方法去掉了,改成containsValue和containsKey,因为contains方法容易让人引起误解。
Hashtable则保留了contains,containsValue和containsKey三个方法,其中contains和containsValue功能相同。
(4)key和value是否允许null值
Hashtable中,key和value都不允许出现null值。HashMap中,null可以作为键,这样的键只有一个;可以有一个或多个键所对应的值为null。
(5)两个遍历方式的内部实现上不同
HashMap使用了 Iterator;Hashtable使用 Iterator,Enumeration两种方式 。
(6)hash值不同
哈希值的使用不同,HashTable直接使用对象的hashCode。而HashMap重新计算hash值。
(7)内部实现使用的数组初始化和扩容方式不同
HashTable在不指定容量的情况下的默认容量为11,增加的方式是 old*2+1;而HashMap为16,Hashtable不要求底层数组的容量一定要为2的整数次幂,而HashMap则要求一定为2的整数次幂。
文章对比了Java中的数组和集合,指出数组长度固定、存储基本类型,而集合长度可变、存储对象。接着详细分析了ArrayList和LinkedList的不同实现方式及其性能特点,以及HashMap和Hashtable的共性和区别,包括线程安全性、null值处理、遍历方式等。HashMap适合单线程,Hashtable适合多线程,但现在推荐使用ConcurrentHashMap。
1090

被折叠的 条评论
为什么被折叠?



