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. **线程与并发**:...
集合框架提供了多种容器来存储和操作对象,如List、Set、Map等。 5. **方法和函数**:方法是Java程序的基本执行单元之一,理解如何定义、调用方法以及传递参数是编程的基础。 6. **面向对象编程**:Java是一种完全...
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流、数据库操作、设计模式等多个方面...