- 1、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
Java集合面试题及答案
1.说说ArrayList和LinkedList的核心区别,实际开发中怎么选?
答案:
首先从底层结构看,ArrayList是动态数组,依赖数组实现;LinkedList是双向链表,每个元素存前后节点引用。
核心区别在操作效率:
查改(get/set):ArrayList通过数组索引直接定位,O(1)效率;LinkedList要从表头/表尾遍历到目标位置,O(n),数据量越大差距越明显。
增删(add/remove,尤其是中间位置):ArrayList可能要移动后续元素(比如在中间删一个,后面所有元素往前挪),O(n);LinkedList只需改前后节点的引用,O(1)。
实际选择:
查多改少用ArrayList(比如商品列表展示,频繁分页查询);
增删频繁且多在首尾用LinkedList(比如实现队列、栈,或者订单待处理列表,频繁添加/移除头部元素)。
另外注意:ArrayList初始容量10(JDK1.8后延迟初始化,第一次add才分配),满了按1.5倍扩容;LinkedList不用考虑扩容,但每个元素要存前后引用,内存占用比ArrayList略高。
2.HashMap和Hashtable有什么不同?为什么现在很少用Hashtable了?
答案:
主要区别有3点:
线程安全:Hashtable是线程安全的(方法加了synchronized),HashMap线程不安全;
null值支持:HashMap的key和value都能存null(但key只能有一个null,value可多个);Hashtable的key和value都不能存null,存了会抛NullPointerException;
底层实现:JDK1.8后,HashMap当链表长度超过8会转红黑树,Hashtable一直是链表,没有树化优化,大数据量下查询效率低。
现在少用Hashtable的原因:
线程安全方案太笨重:synchronized锁的是整个Hashtable对象,多线程并发时会抢同一把锁,效率低;要线程安全的话,现在更推荐ConcurrentHashMap(JDK1.8用CAS+synchronized锁桶,并发效率高);
功能局限:不能存null,且没有树化优化,大数据量下性能差,不如HashMap灵活。
3.HashSet怎么保证元素不重复?它和TreeSet的区别是什么?
答案:
HashSet底层依赖HashMap实现的(把元素存在HashMap的key位置,value存一个固定的空对象),所以去重逻辑和HashMap的key去重一致:
当添加元素时,先算元素的hashCode,找对应的哈希桶;再用equals比较桶里的元素,若hashCode不同,直接存;若hashCode相同且equals返回true,就认为是重复元素,不存。
(这里要注意:如果自定义对象存HashSet,必须重写hashCode和equals,不然会用Object的默认方法,默认按内存地址比较,就算内容一样也会认为是不同元素)
HashSet和TreeSet的区别:
维度
HashSet
TreeSet
排序
不保证顺序(存的时候按哈希桶分布)
自然排序(默认)或定制排序(需传Comparator)
去重逻辑
依赖hashCode+equals
依赖compareTo(或compare),返回0就认为重复
底层实现
HashMap
TreeMap
性能
add/remove查O(1)
查改删O(logn)(红黑树结构)
适用场景
只需去重,不关心顺序
去重且需要排序(比如按价格排商品、按时间排日志)
4.HashMap在JDK1.8做了哪些优化?为什么要树化?
答案:
JDK1.8对HashMap的核心优化有3点:
底层结构:从“数组+链表”改成“数组+链表+红黑树”,当链表长度超过8(且数组长度≥64)时,链表转红黑树;当树节点数少于6时,再转回链表;
哈希算法:简化了hash计算,原来要多次异或和右移,1.8里直接用key的hashCode异或其高16位((h=key.hashCode())^(h16)),减少哈希冲突;
扩容机制:原来扩容时,链表节点会逆序(容易导致多线程下死循环),1.8改用尾插法,保持链表顺序,解决死循环问题(但HashMap仍线程不安全,只是避免了死循环)。
树化的原因:
链表查询是O(n),当
您可能关注的文档
最近下载
- 2025年安徽职业技术大学招聘41人笔试模拟试题及答案解析.docx VIP
- 2010浙江省温州市中考英语真题及答案(Word版).doc VIP
- 中药荆芥课件.pptx VIP
- 2025年安徽职业技术大学招聘41人考试参考题库及答案解析.docx VIP
- 17J008 挡土墙(重力式、衡重式、悬臂式)(必威体育精装版).pdf VIP
- ICS:27.180T_CEEMA 002—2020_风力发电机组功率曲线验证技术规范.pdf VIP
- 成语故事-三心二意2-课件.pptx VIP
- (必会)公路水运工程试验检测师《公共基础》近年考试真题题库资料汇总(300题).pdf VIP
- 江苏2024年二级造价工程师《土建实务》考试真题及答案解析.docx
- 上海市预备年级第一学期数学知识点汇总.docx
文档评论(0)