ArrayList 和 SubList 的坑面试题
![](https://static001.geekbang.org/infoq/40/4092a16d6d307596ab75d5233700e119.jpeg?x-oss-process=image/resize,p_80/auto-orient,1)
👨🏻🎓博主介绍:大家好,我是芝士味的椒盐,一名在校大学生,热爱分享知识,很高兴在这里认识大家🌟🌈擅长领域:Java、消息中间件、大数据、运维。
🙏🏻如果本文章各位小伙伴们有帮助的话,🍭关注+👍🏻点赞+🗣评论+📦收藏。
🤝另本人水平有限,旨在创作简单易懂的文章,在文章描述时如有错,恳请各位大佬指正,在此感谢!!!
代码复现
不要,思考一下会打印出什么?
复制代码
执行结果:
你是否感觉疑惑?在想为什么在 list2 添加的在 list1 也添加是吧?
源码解析
subList 接口
复制代码
我们使用的是 ArrayList,所以是选择 ArrayList 即可
复制代码
复制代码
复制代码
重头戏在 new SubList(this, 0, fromIndex, toIndex);这里,看看下面的 SubList 就会知道,this 关键字将当前对象的引用也就是 list1 传入了 SubList,把传入的 list1 变成 parent 赋值给 SubList 内部成员,然后又将这个构造生成的赋值给 list2,也就是说 list1 和 list2 是引用了同一个对象,指向的是同一 list。
复制代码
再来看看 list2.add 的源码,将元素直接添加在 list1 和 list2 共同的 list 引用对象上,这就是为什么 list2 添加了,list1 也添加了。
复制代码
版权声明: 本文为 InfoQ 作者【芝士味的椒盐】的原创文章。
原文链接:【http://xie.infoq.cn/article/5c4189944e82d1fe3a9e398dd】。文章转载请联系作者。
评论