ArrayList和LinkedList、HashMap和Hashtable的异同

文章对比了Java中的数组和集合,指出数组长度固定、存储基本类型,而集合长度可变、存储对象。接着详细分析了ArrayList和LinkedList的不同实现方式及其性能特点,以及HashMap和Hashtable的共性和区别,包括线程安全性、null值处理、遍历方式等。HashMap适合单线程,Hashtable适合多线程,但现在推荐使用ConcurrentHashMap。

先了解一下数组和集合的区别

集合其实和数组一样都是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的整数次幂。
 

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值