Java 集合框架是最常被问到的 Java 面试问题,要理解 Java 技术强大特性就有必要掌握集合框架。这里有一些实用问题,常在核心 Java 面试中问到。
1、 什么是 Java 集合 API
Java 集合框架 API 是用来表示和操作集合的统一框架,它包含接口、实现类、以及帮助程序员完成一些编程的算法。简言之,API 在上层完成以下几件事:
编程更加省力,提高城程序速度和代码质量
非关联的 API 提高互操作性
节省学习使用新 API 成本
节省设计新 API 的时间
鼓励、促进软件重用
具体来说,有 6 个集合接口,最基本的是 Collection 接口,由三个接口 Set、List、SortedSet 继承,另外两个接口是 Map、SortedMap,这两个接口不继承 Collection,表示映射而不是真正的集合。
2、 什么是 Iterator
一些集合类提供了内容遍历的功能,通过 java.util.Iterator 接口。这些接口允许遍历对象的集合。依次操作每个元素对象。当使用 Iterators 时,在获得 Iterator 的时候包含一个集合快照。通常在遍历一个 Iterator 的时候不建议修改集合本省。
3、 Iterator 与 ListIterator 有什么区别?
Iterator:只能正向遍历集合,适用于获取移除元素。ListIerator:继承 Iterator,可以双向列表的遍历,同样支持元素的修改。
4、 什么是 HaspMap 和 Map?
Map 是接口,Java 集合框架中一部分,用于存储键值对,HashMap 是用哈希算法实现 Map 的类。
5、 HashMap 与 HashTable 有什么区别?对比 Hashtable VS HashMap
两者都是用 key-value 方式获取数据。Hashtable 是原始集合类之一(也称作遗留类)。HashMap 作为新集合框架的一部分在 Java2 的1.2版本中加入。它们之间有一下区别:
HashMap 和 Hashtable 大致是等同的,除了非同步和空值(HashMap 允许 null 值作为 key 和 value,而 Hashtable 不可以)。
HashMap 没法保证映射的顺序一直不变,但是作为 HashMap 的子类 LinkedHashMap,如果想要预知的顺序迭代(默认按照插入顺序),你可以很轻易的置换为 HashMap,如果使用 Hashtable 就没那么容易了。
HashMap 不是同步的,而 Hashtable 是同步的。
迭代 HashMap 采用快速失败机制,而 Hashtable 不是,所以这是设计的考虑点。
6、 在 Hashtable 上下文中同步是什么意思?
同步意味着在一个时间点只能有一个线程可以修改哈希表,任何线程在执行 hashtable 的更新操作前需要获取对象锁,其他线程等待锁的释放。
7、 什么叫做快速失败特性
从高级别层次来说快速失败是一个系统或软件对于其故障做出的响应。一个快速失败系统设计用来即时报告可能会导致失败的任何故障情况,它通常用来停止正常的操作而不是尝试继续做可能有缺陷的工作。当有问题发生时,快速失败系统即时可见地发错错误告警。在 Java 中,快速失败与 iterators 有关。如果一个 iterator 在集合对象上创建了,其它线程欲“结构化”的修改该集合对象,并发修改异常 (ConcurrentModificationException) 抛出。
8、 怎样使 Hashmap 同步?
HashMap 可以通过 Map m = Collections.synchronizedMap(hashMap)来达到同步的效果。
9、 什么时候使用 Hashtable,什么时候使用 HashMap
基本的不同点是 Hashtable 同步 HashMap 不是的,所以无论什么时候有多个线程访问相同实例的可能时,就应该使用 Hashtable,反之使用 HashMap。非线程安全的数据结构能带来更好的性能。
如果在将来有一种可能—你需要按顺序获得键值对的方案时,HashMap 是一个很好的选择,因为有 HashMap 的一个子类 LinkedHashMap。所以如果你想可预测的按顺序迭代(默认按插入的顺序),你可以很方便用 LinkedHashMap 替换 HashMap。反观要是使用的 Hashtable 就没那么简单了。同时如果有多个线程访问 HashMap,Collections.synchronizedMap ()可以代替,总的来说 HashMap 更灵活。
10、为什么 Vector 类认为是废弃的或者是非官方地不推荐使用?或者说为什么我们应该一直使用 ArrayList 而不是 Vector
你应该使用 ArrayList 而不是 Vector 是因为默认情况下你是非同步访问的,Vector 同步了每个方法,你几乎从不要那样做,通常有想要同步的是整个操作序列。同步单个的操作也不安全(如果你迭代一个 Vector,你还是要加锁,以避免其它线程在同一时刻改变集合).而且效率更慢。当然同样有锁的开销即使你不需要,这是个很糟糕的方法在默认情况下同步访问。你可以一直使用 Collections.sychronizedList 来装饰一个集合。
事实上 Vector 结合了“可变数组”的集合和同步每个操作的实现。这是另外一个设计上的缺陷。Vector 还有些遗留的方法在枚举和元素获取的方法,这些方法不同于 List 接口,如果这些方法在代码中程序员更趋向于想用它。尽管枚举速度更快,但是他们不能检查如果集合在迭代的时候修改了,这样将导致问题。尽管以上诸多原因,oracle 也从没宣称过要废弃 Vector.
分享到:
相关推荐
Java程序员集合框架面试题-java集合框架面试题.pdf,这是一份不错的文件
面试中,对于Java程序员来说,集合框架是必考的知识点,因为它涉及到程序的基础架构和数据处理能力。 1. **什么是Java集合API** Java集合API是一系列接口和类的集合,它们定义了处理各种数据结构(如列表、集合、...
2021-2022收藏的精品资料
了解和熟练掌握这些Java集合框架的概念和特性对于Java程序员来说至关重要,它们在实际开发中经常被用到,也是面试中常见的考点。通过深入理解这些知识点,可以帮助程序员编写更高效、更稳定的代码。
Java程序员在面试中可能会遇到各种各样的问题,这些题目涵盖了语言基础、集合框架、多线程、网络编程、设计模式等多个方面。以下是一些可能的知识点解析: 1. **Java语言基础**:这部分通常包括对Java语法的理解,...
Java集合框架常见面试题 剖析⾯试最常⻅问题之 Java 集合框架 包含以下几个模块: 1、集合概述 2、Collection子接口之List 3、Collection子接口之Set 4、Map接口 5、Collection工具类 6、其他重要问题
在Java程序员的面试过程中,掌握核心的编程概念、设计模式、多线程、集合框架、异常处理、IO流、网络编程、数据库操作等是至关重要的。以下是对这些关键知识点的详细解析: 1. **基础语法**:理解并能熟练运用Java...
详细分析了应聘Java程序员职位的常见考点,主要内容包括面试流程及求职准备、Java语言基础、数据类型、集合框架、图形用户界面、输入与输出、多线程、反射机制、网络编程、JDBC、Web开发基础、SSH框架(Struts、...
"java程序员笔试和面试题.pdf" 这份文件提供了 Java 程序员笔试和面试题,涵盖了逻辑思维、Java 基础和 Web 研发三个方面的知识点。 逻辑思维 1. 逻辑思维题目,旨在考察应聘者逻辑思维能力和问题解决能力。 2. ...
Java程序员面试题是一个涵盖广泛领域的主题,涉及到Java基础、Web开发、设计模式、数据库和框架等多个方面。以下是对这些文件内容的详细解析: 1. **Model1-CoreJava.doc & Model1-CoreJava-answer.doc**: 这部分...
9. **集合框架**:Java 集合框架是存储和操作对象的主要工具,包括 List(如 ArrayList 和 LinkedList)、Set(如 HashSet 和 TreeSet)和 Map(如 HashMap 和 TreeMap)等接口及其实现类。 10. **线程与并发**:...
Java程序员在面试和笔试过程中经常会遇到一系列挑战性的技术问题,这些问题涵盖了Java语言的基础、进阶特性、并发编程、集合框架、设计模式、JVM优化、数据库交互等多个方面。以下是一些核心的知识点详解: 1. **...
Java集合框架主要包括List、Set、Map三种集合类型,以及它们的各种实现类如ArrayList、LinkedList、HashSet、HashMap等,用于高效地存储和操作数据。 #### 19. 线程的创建方式,进程线程的理解 - **线程创建方式**...
《Java程序员面试笔试宝典题库(2018最新版)》是为准备Java程序员面试的求职者精心编纂的一份参考资料。这份资源包含了2018年最新的面试问题和笔试题,旨在帮助求职者全面掌握Java编程语言的核心概念、技术要点以及...
- **SSH (Struts + Spring + Hibernate) 框架面试题**: 综合考察三个框架之间的集成和协作。 #### 三、数据库和框架配置 - **数据库在 JDBC 中的连接方法**: JDBC 连接池、驱动加载等。 - **Struts 和 Hibernate ...
Java程序员面试时,通常会遇到一系列关于语言特性和框架的问题,这些题目旨在考察候选人的基础知识、问题解决能力和实践经验。以下是对这些面试题目的详细解答: 1. **final, finally, finalize的区别**: - `...
Java程序员在面试中需要掌握的知识点广泛而深入,涵盖了核心Java、面向对象设计与UML、XML、SQL、JDBC与Hibernate、Web技术、企业级Java应用如EJB与Spring,以及数据结构、算法和计算机基础知识,甚至有时还会涉及...
根据提供的文件信息,我们可以整理出一系列与Java程序员面试相关的知识点,包括但不限于基本数据类型、字符串操作、集合框架、异常处理等内容。下面是详细的知识点解析: ### 基本数据类型 1. **基本数据类型与...
【Java程序员必备——比较全的Java面试题】 Java编程语言作为全球最受欢迎的开发语言之一,其面试题库广泛且深入,涵盖了基础语法、面向对象、集合框架、多线程、网络编程、I/O流、数据库操作、设计模式等多个方面...
Java 集合框架常见面试题 Java 集合框架是 Java 编程语言中的一种基础数据结构,用于存储和操作对象的集合。 Java 集合框架提供了多种类型的集合类,包括 List、Set、Map 等,每种集合类都有其特点和使用场景。 ...