一、ArrayList 和 LinkedList区别:

(1)两者都是线程不安全,都实现了Collection接口。

(2)数据结构:ArrayList是基于动态数组的数据结构,LinkedList是基于双向链表的数据结构。

(3)性能:ArrayList支持随机访问,查询快,增删慢,查询的时间复杂度为O(1),插入和删除的时间复杂度为O(n),因为对插入和删除位置后面的元素进行移动位置,以保证内存的连续性

LinkedList不支持随机访问,查询慢,增删快,查询的时间复杂度为O(n),插入和删除的时间复杂度为O(1)

ArrayList:

  • get() 直接读取第几个下标,复杂度 O(1);
  • add(E) 添加元素,直接在后面添加,复杂度O(1);
  • add(index, E) 添加元素,在第几个元素后面插入,后面的元素需要向后移动,复杂度O(n);
  • remove()删除元素,后面的元素需要逐个移动,复杂度O(n)。

LinkedList:

  • get() 获取第几个元素,依次遍历,复杂度O(n);
  • add(E) 添加到末尾,复杂度O(1);
  • add(index, E) 添加第几个元素后,需要先查找到第几个元素,直接指针指向操作,复杂度O(n);
  • remove()删除元素,直接指针指向操作,复杂度O(1)。

(4)空间的消耗:ArrayList的空间浪费主要体现在在list列表的结尾预留一定的容量空间,而LinkedList的空间花费则体现在它的每一个元素都需要消耗相当的空间。

二、ArrayList和Vector的区别:

(1)数据结构:ArrayList和Vector底层的数据结构都是数组。

(2)线程安全:Vector线程安全的,底层使用synchronize进行加锁,而ArrayList是线程不安全的。

(3)性能:由于Vector使用synchronize锁来确保线程的安全性,所以性能会稍逊于ArrayList。

(4)初始容量和扩容:ArrayList和Vector的默认初始容量都是10,但是扩容时,ArrayList容量会增长为原来的1.5倍,而Vector的容量会增长为原来的2倍。

(5)Vector实现的Enumeration接口,所以可以使用Enumeration进行遍历元素。

三、HashMap和Hashtable的区别:

(1)线程安全性:这是两者最主要的区别,Hashtable是线程安全,而HashMap则非线程安全。Hashtable的实现方法里面都添加了synchronized关键字来确保线程同步,因此相对而言HashMap性能会高一些。

(2)计算hash值的方式:HashMap中元素的hash值是重新计算过的,以便获得更好的散列值,Hashtable直接使用Object的hashcode

(3)数据结构:在JDK1.8之前,HashMap和Hashtable的数据结构都可以看成“数组+链表”;在JDK1.8之后,HashMap的数组结构变成了“数组+链表+红黑树”

(4)两者均实现了Map接口,但是HashMap继承了AbstractMap,HashTable继承Dictionary抽象类

(5)HashMap允许null值和null键(只允许一个),HashMap以null作为key时,总是存储在table数组的第一个节点上。而Hashtable则不允许null作为key。

(6)HashMap的初始容量为16,Hashtable初始容量为11,两者的填充因子默认都是0.75。扩容时,HashMap的容量变成原来的2倍,Hashtable的容量变为2倍+1

(7)Hashtable实现了Enumeration接口,所以可以使用Enumeration进行遍历元素

(8)判断是否含有某个键 :HashMap去掉了Hashtable中的contains()方法

在HashMap 中,null 可以作为键,这样的键只有一个;可以有一个或多个键所对应的值为null。当get()方法返回null 值时,既可以表示HashMap 中没有该键,也可以表示该键所对应的值为null。因此,在HashMap 中不能用get()方法来判断HashMap 中是否存在某个键,而应该用containsKey()方法来判断。

Hashtable 的键值都不能为null,所以可以用get()方法来判断是否含有某个键。

 

四、HashMap和HashSet的区别:

ArrayList与LinkedList、Vector的区别 HashMap与HashTable、HashSet的区别相关推荐

  1. HashMap和Hashtable的详细区别

    HashMap和Hashtable的详细区别 一.简述: 1.安全性 Hashtable是线程安全,HashMap是非线程安全.HashMap的性能会高于Hashtable,我们平时使用时若无特殊需求 ...

  2. HashMap与HashTable联系与区别

    HashMap与HashTable 1.hashMap去掉了HashTable 的contains方法,但是加上了containsValue()和containsKey()方法. 2.hashTabl ...

  3. Java中的HashMap和Hashtable有什么区别?

    Java中的aHashMap和a有什么区别Hashtable? Java中的aHashMap和a有什么区别Hashtable? Java中的aHashMap和a有什么区别Hashtable? Java ...

  4. hashmap put复杂度_集合类HashMap,HashTable,ConcurrentHashMap区别?

    作者简介: 华哥 10年+后端开发工作经验, 主要分享:关于java体系的知识,如:java基础知识/数据结算/算法,Spring/MyBatis/Netty源码分析,高并发/高性能/分布式/微服务架 ...

  5. 面试题 HashMap和HashTable有什么区别

  6. HashMap、HashTable、ConcurrentHashMap、HashSet区别 线程安全类

    HashMap专题:HashMap的实现原理--链表散列 HashTable专题:Hashtable数据存储结构-遍历规则,Hash类型的复杂度为啥都是O(1)-源码分析 Hash,Tree数据结构时 ...

  7. HashMap底层实现原理/HashMap与HashTable区别/HashMap与HashSet区别

    Hash算法 Hash,一般翻译做"散列",也有直接音译为"哈希"的,就是把任意长度的输入(又叫做预映射, pre-image),通过散列算法,变换成固定长度的 ...

  8. HashMap底层实现原理/HashMap与HashTable区别/HashMap与HashSet区别(转)

    HashMap底层实现原理/HashMap与HashTable区别/HashMap与HashSet区别 文章来源:http://www.cnblogs.com/beatIteWeNerverGiveU ...

  9. 18.集合框架(Map集合,HashMap和Hashtable的区别,Collections(集合工具类),集合练习,模拟斗地主(洗牌,发牌,看牌))

    1.Map集合概述和特点 1.需求:    根据学号获取学生姓名 2.Map接口概述     查看API可以知道:     将键映射到值的对象     一个映射不能包含重复的键     每个键最多只能 ...

最新文章

  1. VS 远程调试 Azure Web App
  2. java object monitor_Java-线程状态、ObjectMonitor
  3. 文章内容页调用所属栏目地址的标签
  4. autofac 作用域_控制作用域和生命周期
  5. AIDE支持实时错误检查、代码重构、代码智能导航、生成APK
  6. Python办公自动化,对文件进行自由操作
  7. PHPstudy搭建本地环境的网页加载速度慢的解决方案
  8. codeforces 977A-C语言解题报告
  9. JavaScript权威设计--JavaScript表达式与运算符(简要学习笔记五)
  10. python 内置模块random_Python3.5内置模块之random模块用法实例分析
  11. linux下编程语言,linux下各种编程语言安装
  12. 百度:在O(1)空间复杂度范围内对一个数组中前后连段有序数组进行归并排序
  13. CICD之maven介绍
  14. 将cocos2dx项目从VS移植到Eclipse - CoolJie
  15. 2019314输入一个日期,输出星期几
  16. 发邮件如何隐藏IP地址
  17. 电源知识——LDO线性电源、开关电源(基础)
  18. midi java_java midi音乐文件播放器
  19. 计算机音乐谱安娜的橱窗,《安娜的橱窗,钢琴谱》2,封茗囧菌(五线谱 钢琴曲 指法)-弹吧|蛐蛐钢琴网...
  20. 搜狐邮箱打开第三方邮件客户端登录功能及设置独立密码方法

热门文章

  1. 三十七、Sql 补充 | 数据库优化
  2. 化工原理 蒸馏(下)
  3. 数据科学篇| Seaborn库的使用(四)
  4. win7计算机怎么找管理员,Win7系统Administrator不见了怎么解决?
  5. 博士申请 | 佐治亚理工学院陈永昕教授招收机器学习理论方向博士生
  6. 大规模图训练调优指南
  7. CMU提出「十字绣网络」,自动决定多任务学习的最佳共享层
  8. poj2955 Brackets 最大括号匹配 区间动态规划
  9. python画海绵宝宝_脑洞大开的万圣节,10招带你和宝宝花式玩南瓜
  10. python统计字符出现的次数最多的字符_Python统计字符串中出现次数最多的人名