Hashtable 和 HashMap之间的区别

Hashtable是继承了Dictionary,是线程安全的HashMap实现了Map接口,不是线程安全的
HashMap是Hashtable的轻量级实现(非线程安全的实现),他们都完成了Map接口,主要区别在于HashMap允许空(null)键值(key),由于非线程安全,效率上可能高于Hashtable。
HashMap允许将null作为一个entry的key或者value,而Hashtable不允许。
HashMap把Hashtable的contains方法去掉了,改成containsvalue和containsKey。因为contains方法容易让人引起误解。
Hashtable继承自Dictionary类,而HashMap是Java1.2引进的Map interface的一个实现。
最大的不同是,Hashtable的方法是synchronize的,而HashMap不是,在多个线程访问Hashtable时,不需要自己为它的方法实现同步,而HashMap 就必须为之提供外同步。
Hashtable和HashMap采用的hash/rehash算法都大概一样,所以性能不会有很大的差异。
如何保证线程安全的?每个修改容器中数据的操作都是同步的(synchronized),因此保证了线程安全。

ConcurrentHashMap和Hashtable的区别
Hashtable和ConcurrentHashMap有什么分别呢?它们都可以用于多线程的环境,但是当Hashtable的大小增加到一定的时候,性能会急剧下降,因为迭代时需要被锁定很长的时间。因为ConcurrentHashMap引入了分割(segmentation),不论它变得多么大,仅仅需要锁定map的某个部分,而其它的线程不需要等到迭代完成才能访问map。简而言之,在迭代的过程中,ConcurrentHashMap仅仅锁定map的某个部分,而Hashtable则会锁定整个map。

ArrayList,LinkedList, Vector三者的区别

LinkedList内部以链表形式存储数据
ArrayList内部以数组形式存储数据。
Vector同ArrayList,不过它与ArrayList比较起来是线程安全的。
ArrayList 和Vector都是使用数组方式存储数据,此数组元素数大于实际存储的数据以便增加和插入元素,它们都允许直接按序号索引元素,但是插入元素要涉及数组元素移动等内存操作,所以索引数据快而插入数据慢,Vector由于使用了synchronized方法(线程安全),通常性能上较ArrayList差,而LinkedList使用双向链表实现存储,按序号索引数据需要进行前向或后向遍历,但是插入数据时只需要记录本项的前后项即可,所以插入速度较快。

String, StringBuffer, StringBuilder三者区别

String 字符串常量
StringBuffer 字符串变量(线程安全)
StringBuilder 字符串变量(非线程安全)
简要的说,String 类型和 StringBuffer 类型的主要性能区别其实在于 String是不可变的对象, 因此在每次对 String 类型进行改变的时候其实都等同于生成了一个新的 String 对象,然后将指针指向新的 String 对象,所以经常改变内容的字符串最好不要用 String ,因为每次生成对象都会对系统性能产生影响,特别当内存中无引用对象多了以后, JVM 的 GC 就会开始工作,那速度是一定会相当慢的。而如果是使用 StringBuffer 类则结果就不一样了,每次结果都会对 StringBuffer 对象本身进行操作,而不是生成新的对象,再改变对象引用。所以在一般情况下我们推荐使用 StringBuffer ,特别是字符串对象经常改变的情况下。
StringBuffer与StringBuilder中的方法和功能完全是等价的,只是StringBuffer中的方法大都采用了synchronized关键字进行修饰,因此是线程安全的,而StringBuilder没有这个修饰,可以被认为是线程不安全的。
StringBuilder一个可变的字符序列。此类提供一个与StringBuffer兼容的API,但不保证同步。该类被设计用作StringBuffer的一个简易替换,用在字符串缓冲区被单个线程使用的时候(这种情况很普遍)。如果可能,建议优先采用该类,因为在大多数实现中,它比StringBuffer要快。

Collection 和 Collections的区别
Collection是集合类的上级接口,继承与他的接口主要有Set 和List.
Collections是针对集合类的一个帮助类,他提供一系列静态方法实现对各种集合的搜索、排序、线程安全化等操作。

转载于:https://www.cnblogs.com/wait/p/5871973.html

Java面试常见各种概念区别比较相关推荐

  1. java面试常见面试问题_Java面试准备:15个Java面试问题

    java面试常见面试问题 并非所有的访谈都将重点放在算法和数据结构上-通常,访谈通常只侧重于您声称是专家的语言或技术.在此类访谈中,通常没有任何"陷阱"问题,而是它们要求您利用内存 ...

  2. java面试常见设计模式

    java面试常见设计模式 看这里,动画描述很好 创建型模式 工厂方法模式 目的 结构 场景 优缺点 示例代码 button factory Demo.java: 客户端代码 抽象工厂模式 目的 结构 ...

  3. Java面试常见知识点总结

    目录 面试常见知识点 静态代码块 代码块 构造方法之间的顺序 interface和abstract的区别 abstract能不能继承interface 反正可不可以 interface 和abstra ...

  4. 京东深资架构师告诉你Java面试常见知识点(建议收藏)

    后端架构师 专注研究 Java 核心技术.架构,不限于分享算法.架构.高并发.多线程.JVM.Spring Boot.Maven.分布式.Spring Cloud +Docker+k8s.Dubbo. ...

  5. Java面试--autowired和resource区别

    面试题:autowired和resource有什么区别(百度面试题) autowired和resource有什么区别 @Resource默认是按照名称来装配注入的,只有当找不到与名称匹配的bean才会 ...

  6. Java面试常见算法

    在程序员的职业生涯中,算法亦算是一门基础课程,尤其是在面试的时候,很多公司都会让程序员编写一些算法实例,例如快速排序.二叉树查找等等. 本文总结了程序员在代码面试中最常遇到的10大算法类型,想要真正了 ...

  7. 自动装箱自动拆箱java,自动装箱?拆箱?==问题?详解java面试常见的一个问题...

    1:前言 相信大家都在面试中都被问到过一个问题,这个问题也是近年来面试官刁难人比较常见的一个问题,所以也被大家所熟知了,本质上也很简单,但是也是非常基础的一个题目. Integer a = 100; ...

  8. Java 面试常见项目问题回答

    之前整理了好几期,我面试时遇到的面试候选人,我是如何我去筛选的,这一期,我们来看下一些 面试常问的业务性的问题 你们公司权限认证是如何实现的? 这其实是个通用性的问题,大部分公司 小型公司,或者中型公 ...

  9. 互联网IT就业市场,你要说最有市场的一定是它,java面试常见笔试题

    ♦ Java就业前景 ♦ Java工程师薪资 ♦ 未来发展 下面,播妞将针对这 3 个问题给大家进行详细解答,希望能够给处在"慌"金时代的你带来一些启发. Java 就业景气指数 ...

最新文章

  1. iPhone开发进阶(1) --- 深入理解iPhone OS/SDK与Objective-C 2.0
  2. Github上影响力最大的十位Pythoner
  3. python中的tkinter_基于python中tkinter的计算机实现
  4. 难度炸裂!DeepChange:一个新的超大规模的换衣行人再识别数据集
  5. CSS3 过渡和动画
  6. 2017.6.23 染色 思考记录
  7. 全球顶级开源大神们现身 COSCon‘20
  8. html+fadein动画,使用Animate.css制作超炫的CSS3动画
  9. 鼠标移到图片上,图片放大
  10. Android集成腾讯X5WebView
  11. 伪加密文件的破解方法
  12. Python HackerRank 刷题 Minimum Distances
  13. 企业为什么要建立档案管理?具体如何实现?
  14. 软件测试培训一般多少钱?
  15. 6410 UBOOT 支持SD/SDHC卡启动 FAT32文件系统 yaffs2烧录 图片显示烧录状态
  16. 从特征融合的视角设计图神经网络的拓扑结构
  17. 电视信号中的一些基本概念 (转自驱动之家)
  18. linux 找u盘,linux系统怎样找到U盘?
  19. 微信小程序请求及封装请求方式
  20. GTN Yan LeCun 1998 文章中的一步

热门文章

  1. turbo c 2.0 官方下载_随剪app下载-随剪2.0安卓官方版下载v2.0
  2. AcWing 4240. 青蛙(最短路 or 最小生成树)
  3. 导入导出mysql数据库命令
  4. laravel 模型事件几种用法
  5. 如何设置dedecms自定义表单必填项?
  6. MySQL之终端(Terminal)管理MySQL
  7. GitHub上最流行的10000个Java都使用了哪些库?
  8. 必须重视针对SCADA系统的***
  9. java 栈 堆 区别_java中栈与堆的区别
  10. 一维二维_Excel教程:二维转一维,方法你绝对没用过