浅析ArrayList、LinkedList;HashMap与HashTable的区别

首先我们需要对集合框架有一定的了解,此处我画了一个集合框架图,如下图:
在这里插入图片描述

对于ArrayList与LinkedList,我们分别从三个方面进行了对比说明,区别如下:

1. 底层数据结构:
ArrayList 和 LinkedList 在存储元素上前者采用数组存储,后者采用双链表存储数据
2. 存储数据选取:
头插和头删操作频繁适合选取LinkedList存储数据,时间复杂度达到最小O(1)。数组的随机访问效率最高,时间复杂度达到O(1),如果频繁的进行尾插尾删操作则一般情况下选择的是数组。
3. 遍历方式的区别:
ArrayList遍历使用到迭代器遍历Iterator。而LinkedList有两种遍历方式,一种是Iterator,另一种可以逆向遍历ListIterator。

HashTable和HashMap采用相同的存储机制,二者的实现基本一致,不同的是:

(1)HashMap是非线程安全的,HashTable是线程安全的,内部的方法基本都经过synchronized修饰。
(2)因为同步、哈希性能等原因,性能肯定是HashMap更佳,因此HashTable已被淘汰。
(3) HashMap允许有null值的存在,而在HashTable中key与value均不可以为null,有一个为null时直接抛出NullPointerException。
(4)HashMap默认初始化数组的大小为16,HashTable为11。前者扩容时乘2,使用位运算取得哈希,效率高于取模。
而后者为乘2加1,都是素数和奇数,这样取模哈希结果更均匀。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值