
Java中级面试题整理
5星
- 浏览量: 0
- 大小:None
- 文件类型:DOCX
简介:
本资料集锦了众多企业在招聘Java中级开发工程师时常用的面试题目及解答,旨在帮助求职者备考和提升编程技能。
本段落总结了Java中级面试题的内容,涵盖了集合、HashMap、HashSet、HashTable、ConcurrentHashMap、红黑树以及Java 8对HashMap的优化等方面的知识。
**集合**
- List与Set都继承自Collection接口:List是有序可重复的,而Set则是无序且不可重复。
- Set中放入元素的位置由其hashCode决定;在将一个对象加入到Set之前,必须定义equals方法以确保正确性。
- 对于查询操作,List可以使用for循环或迭代器进行遍历,但Set只能通过迭代器来访问其中的元素。
- List的优点在于快速查找能力,而插入和删除效率较低。相比之下,Set具有较高的插入与删除性能。
**HashSet**
- HashSet保证唯一性的机制是:首先根据HashCode判断地址是否相同;如果相等,则进一步使用equals方法进行比较确认对象是否一致。
**HashMap、HashTable、ConcurrentHashMap**
- HashMap是非线程安全的容器类型,而Hashtable则是线程安全的。此外,ConcurrentHashMap也提供并发访问的支持。
- 在JDK 1.8版本之前,HashMap采用的是数组加链表的数据结构;而在之后,则引入了红黑树以优化性能(当链表长度超过阈值时)。
- HashMap通过高、低两部分Hashcode进行异或运算来生成最终的hash值。这种设计能够减少冲突,并且计算高效。
**红黑树**
- 红黑树是一种自平衡二叉搜索树,具有五条性质以确保其结构特性:
- 根节点始终为黑色。
- 所有叶子结点(NIL)均为黑色。
- 节点非红色即黑色。
- 如果一个节点是红色,则它的两个子节点必须都是黑色的。
- 对于任何一条从根到叶节点的路径,其中包含相同数量的黑节点。
**Java 8对HashMap的优化**
- Java 8版本中将链表结构改为数组加红黑树以提高查询效率。当超过一定长度时(默认为8),会自动转换成红黑树。
- 在链表元素少于6个之前不会回退到原形式,避免频繁切换影响性能。
**尾插法**
- 由于头插可能导致数据结构中的循环引用问题,因此从JDK7开始将插入策略改为尾部追加。当重新散列时,旧的链会倒置顺序导致原有逻辑失效。
**有序Map实现方式对比**
- HashMap、HashTable和ConcurrentHashMap都是根据哈希值随机存储元素,并不具备固定的排序规则。
- LinkedHashMap通过维护一个额外的双向链接列表来保持插入或访问顺序。
- TreeMap利用红黑树结构,支持基于键自然顺序或者自定义比较器(Comparator)进行有序排列。
**IdentityHashMap**
- IdentityHashMap判断两个Key是否相等的标准是引用地址一致而非equals方法返回值相同;允许null作为key和value,并且不遵循Map接口的一般约定。
- 与其它类型不同,它不是按照特定顺序存储元素的。
全部评论 (0)


