【本文转自极客原创  作者:张锋 原文链接:】

Java集合框架是什么?说出一些集合框架的优点?

每种编程语言中都有集合,最初的Java版本包含几种集合类:Vector、Stack、HashTable和Array。随着集合的广泛使用,Java1.2提出了囊括所有集合接口、实现和算法的集合框架。在保证线程安全的情况下使用泛型和并发集合类,Java已经经历了很久。它还包括在Java并发包中,阻塞接口以及它们的实现。集合框架的部分优点如下:

使用核心集合类降低开发成本,而非实现我们自己的集合类。

随着使用经过严格测试的集合框架类,代码质量会得到提高。

通过使用JDK附带的集合类,可以降低代码维护成本。

复用性和可操作性。

集合框架中的泛型有什么优点?

Java1.5引入了泛型,所有的集合接口和实现都大量地使用它。泛型允许我们为集合提供一个可以容纳的对象类型,因此,如果你添加其它类型的任何元素,它会在编译时报错。这避免了在运行时出现ClassCastException,因为你将会在编译时得到报错信息。泛型也使得代码整洁,我们不需要使用显式转换和instanceOf操作符。它也给运行时带来好处,因为不会产生类型检查的字节码指令。

Java集合框架的基础接口有哪些?

Collection为集合层级的根接口。一个集合代表一组对象,这些对象即为它的元素。Java平台不提供这个接口任何直接的实现。

Set是一个不能包含重复元素的集合。这个接口对数学集合抽象进行建模,被用来代表集合,就如一副牌。

List是一个有序集合,可以包含重复元素。你可以通过它的索引来访问任何元素。List更像长度动态变换的数组。

Map是一个将key映射到value的对象.一个Map不能包含重复的key:每个key最多只能映射一个value。 一些其它的接口有Queue、Dequeue、SortedSet、SortedMap和ListIterator。

为何Collection不从Cloneable和Serializable接口继承?

Collection接口指定一组对象,对象即为它的元素。如何维护这些元素由Collection的具体实现决定。例如,一些如List的Collection实现允许重复的元素,而其它的如Set就不允许。很多Collection实现有一个公有的clone方法。然而,把它放到集合的所有实现中也是没有意义的。这是因为Collection是一个抽象表现。重要的是实现。 当与具体实现打交道的时候,克隆或序列化的语义和含义才发挥作用。所以,具体实现应该决定如何对它进行克隆或序列化,或它是否可以被克隆或序列化。 在所有的实现中授权克隆和序列化,最终导致更少的灵活性和更多的限制。特定的实现应该决定它是否可以被克隆和序列化。

为何Map接口不继承Collection接口?

尽管Map接口和它的实现也是集合框架的一部分,但Map不是集合,集合也不是Map。因此,Map继承Collection毫无意义,反之亦然。 如果Map继承Collection接口,那么元素去哪儿?Map包含key-value对,它提供抽取key或value列表集合的方法,但是它不适合“一组对象”规范。

什么是迭代器(Iterator)?

**Iterator接口提供了很多对集合元素进行迭代的方法。**每一个集合类都包含了可以返回迭代器实例的迭代方法。迭代器可以在迭代的过程中删除底层集合的元素,但是不可以直接调用集合的remove(Object Obj)删除,可以通过迭代器的remove()方法删除。

Iterator和ListIterator的区别是什么?

下面列出了他们的区别:

Iterator可用来遍历Set和List集合,但是ListIterator只能用来遍历List。

Iterator对集合只能是前向遍历,ListIterator既可以前向也可以后向。

ListIterator实现了Iterator接口,并包含其他的功能,比如:增加元素,替换元素,获取前一个和后一个元素的索引,等等。

快速失败(fail-fast)和安全失败(fail-safe)的区别是什么?

快速失败:当你在迭代一个集合的时候,如果有另一个线程正在修改你正在访问的那个集合时,就会抛出一个ConcurrentModification异常。

在java.util包下的都是快速失败。 安全失败:你在迭代的时候会去底层集合做一个拷贝,所以你在修改上层集合的时候是不会受影响的,不会抛出ConcurrentModification异常。

在java.util.concurrent包下的全是安全失败的。

Java中的HashMap的工作原理是什么?

我们知道在Java中最常用的两种结构是数组和模拟指针(引用),几乎所有的数据结构都可以利用这两种来组合实现,HashMap也是如此。实际上HashMap是一个“链表散列”,如下是它数据结构:最左侧是一个数组,数组中的每一个元素都是一个链表,链表的每一个元素都是entry。

HashMap是基于hashing的原理,我们使用put(key, value)存储对象到HashMap中,使用get(key)从HashMap中获取对象。当我们给put()方法传递键和值时,我们先对键调用hashCode()方法,返回的hashCode用于找到bucket位置来储存Entry对象。

当两个对象的hashcode相同会发生什么?

因为hashcode相同,所以它们的bucket位置相同,‘碰撞’会发生。因为HashMap使用链表存储对象,这个Entry(包含有键值对的Map.Entry对象)会存储在链表中。

java并发集合面试题,那些经常被问的JAVA面试题(1)—— 集合部分相关推荐

  1. Java并发编程思维导图(知识点总结,含面试题整理)

    我公布的所有思维导图笔记(后端技术知识点汇总)  目录链接 前言 继JVM思维导图之后又一肝作 年前刚好整理完毕,公开克隆分享. 本张思维导图优势 思维导图融入大量java并发编程知识的同时,覆盖大量 ...

  2. 《Java并发编程的艺术》一一第2章Java并发机制的底层实现原理

    第2章Java并发机制的底层实现原理 2.1 volatile的应用 Java代码在编译后会变成Java字节码,字节码被类加载器加载到JVM里,JVM执行字节码,最终需要转化为汇编指令在CPU上执行, ...

  3. 《Java并发编程的艺术》:第2章 Java并发机制的底层实现原理

    前言 Java代码在编译后会变成Java字节码,字节码被类加载器加载到JVM里,JVM执行字节 码,最终需要转化为汇编指令在CPU上执行,Java中所使用的并发机制依赖于JVM的实现和 CPU的指令. ...

  4. 企业面试题|最常问的MySQL面试题集合(二)

    MySQL的关联查询语句 六种关联查询 交叉连接(CROSS JOIN) 内连接(INNER JOIN) 外连接(LEFT JOIN/RIGHT JOIN) 联合查询(UNION与UNION ALL) ...

  5. 企业面试题|最常问的MySQL面试题集合(一)

    问题1:char.varchar的区别是什么? varchar是变长而char的长度是固定的.如果你的内容是固定大小的,你会得到更好的性能. 问题2: TRUNCATE和DELETE的区别是什么? D ...

  6. 『图解Java并发编程系列』10张图告诉你Java并发多线程那些破事

    目录 线程安全问题 活跃性问题 性能问题 有态度的总结 头发很多的程序员:『师父,这个批量处理接口太慢了,有什么办法可以优化?』架构师:『试试使用多线程优化』第二天头发很多的程序员:『师父,我已经使用 ...

  7. JAVA访问修饰符限制性最高的_问:JAVA中,访问修饰符限制性最高的是protected ( )...

    问:JAVA中,访问修饰符限制性最高的是protected ( ) A:对,B:错 正确答案: 解析: 问:JAVA中,访问修饰符限制性最高的是protected ( )A:对,B:错 相关问题: 密 ...

  8. 【Java并发性和多线程】如何创建并运行java线程

    2019独角兽企业重金招聘Python工程师标准>>> 本文为转载学习 原文链接:http://tutorials.jenkov.com/java-concurrency/creat ...

  9. 《Java并发编程的艺术》读书笔记 - 第八章 - Java中的并发工具类

    目录 前言 等待多线程完成的 CountDownLatch 示例 同步屏障 CyclicBarrier 示例 CyclicBarrier 和 CountDownLatch 的区别 控制并发线程数量的 ...

最新文章

  1. Git与SVN区别 \git学习
  2. OpenGL 点光源阴影Point Shadows
  3. oracle 命令日志输出,ORACLE常用命令日志
  4. 接口测试工具---apipost控制台使用
  5. python和c 的区别-Python与C语言有什么区别?
  6. Vue学习笔记 出自http://www.cnblogs.com/chenzechuang/p/6687267.html#top
  7. 基于linux的嵌入式触摸屏,基于嵌入式linux的触摸屏驱动设计
  8. html上传文件出现fakepath,chrome upload file 出现 fakepath,请解决方案
  9. unity3d shader之Julia集和Mandelbrot集绘制美丽图案
  10. 什么是商业智能(BI),就看这篇文章足够了
  11. 计算机cpu的定义,CPU是什么?
  12. 多网聚合路由系统打通“融媒体”5G丝绸之路
  13. 仿今日头条后台管理系统(一)
  14. MySQL 基础知识入门教程
  15. 将opera强制的搜狗转为百度搜索
  16. flink的Savepoint
  17. 漫画 | 妹子让我写个程序,我却搞砸了...
  18. 无聊的程序员教你如何使用十几行代码练就单身20年的手速(文末彩蛋)
  19. 元宇宙体验全时空体育馆|广州华锐互动
  20. excel表格如何转换成word表格_excel转化为word表格怎么做?

热门文章

  1. 世界备份日,您的数据足够安全吗?
  2. Soloπ:支付宝开源的Android专项测试工具
  3. Kubernetes从懵圈到熟练:读懂这一篇,集群节点不下线
  4. 开源SQL-on-Hadoop系统一览
  5. 视频直播常见问题与解决办法汇总【系列三—直播推流】
  6. 这个数据仓库,竟然把淘宝和京东干翻了。。
  7. 在 520 这天,竟然有人把 Docker讲清楚了? | 原力计划
  8. 云+X案例展 | 传播类:南方报业数据中台建设,助力“智媒”飞跃发展
  9. 微服务落地,我们在考虑什么?| 技术头条
  10. python业余项目_学会这8个优秀 Python 库用于业余项目,将大大减少程序员耗费的精力...