常见数据结构区别

栈和队列的区别

  • 队列先进先出,栈先进后出
  • 对插入和删除操作的限定不同,栈是限定只能在表的同一端进行插入和删除的线性表,队列是限定只在表的一端进行插入而另一端进行删除操作的线性表
  • 遍历速度不同,栈只能从头部取数,需要遍历整个栈,而且遍历的时候需要开辟新的临时空间,队列可以从头或者尾部开始遍历,无需开辟新的临时空间,遍历过程中不影响数据结构,速度要快很多

数组和链表的区别

  • 数组静态分配内存,链表动态分配内存
  • 数组需要连续的内存空间,链表不需要
  • 数组元素存在栈区,链表元素在堆区
  • 数组查询时间为O(1),插入为O(n),链表正好相反

HashMap和Hashtable的区别

  • 继承的父类不同:Hashtable继承自Dictionary类,而HashMap继承自抽象Map类。但二者都实现了Map接口
  • 线程安全性不同:Hashtable线程安全,而HashMap线程不安全。
    具体分析:Hashtable线程安全是因为每个方法中都加入了Synchronize。HashMap底层是个数组,当发生hash冲突的时候,hashmap采用链表的方式解决,在对应的数组位置存放链表的头节点。对链表而言,新加入的节点会从头节点加入。另外,resize这个操作会产生一个新的容量的数组,然后对原数组的所有键值对重新进行计算和写入新的数组,之后指向新生成的数组。
    当多个线程同时检测到总数量超过门限值得时候就会同时调用resize操作,各自生成新的数组并rehash之后赋给该map底层的数组table,结果只有最后一个线程生成的新数组被赋给table变量,其他线程的均会丢失。而且当某些线程已经完成赋值而其他线程刚开始的时候,就会用已经被赋值的table作为原始数组,这样也会有问题
  • 是否提供contains方法:HashMap把contains方法去掉了,改成了contains Value和containsKey;而hashtable则保留了contains,containsValue和containsKey三个方法,其中contains和containsValue功能相同
  • Hash值不同:hash值得使用不同,hashtable直接使用对象的hashCode,而hashmap重新计算hash值
  • 内部实现使用的数组初始化和扩容方式不同:Hashtable在不指定容量的情况下默认容量为11,而HashMap为16;Hashtable不要求底层的底层数组的数量一定为2的整数次幂,而HashMap则要求一定为2的整数次幂;Hashtable扩容时,将容量变为原来的2倍加1,而HashMap扩容时,将容量变为原来的2倍
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • Java8张图 11、字符串不变性 12、equals()方法、hashCode()方法的区别 13、...
    Miley_MOJIE阅读 3,867评论 0 11
  • java笔记第一天 == 和 equals ==比较的比较的是两个变量的值是否相等,对于引用型变量表示的是两个变量...
    jmychou阅读 1,625评论 0 3
  • Java SE 基础: 封装、继承、多态 封装: 概念:就是把对象的属性和操作(或服务)结合为一个独立的整体,并尽...
    Jayden_Cao阅读 2,215评论 0 8
  • 数据结构是以某种形式将数据组织在一起的集合,它不仅存储数据,还支持访问和处理数据的操作。Java提供了几个能有效地...
    今生心理金馀阅读 2,144评论 2 12
  • 从三月份找实习到现在,面了一些公司,挂了不少,但最终还是拿到小米、百度、阿里、京东、新浪、CVTE、乐视家的研发岗...
    时芥蓝阅读 42,620评论 11 349

友情链接更多精彩内容