集合框架解析和遍历性能比较

47 篇文章 0 订阅
13 篇文章 0 订阅

场景
面试通常会问到关于集合框架的问题,总结如下:

1 arrayList与LinkedList 共同实现了哪些接口?及实现后的意义?

1.1 共同接口和实现

ArrayList,继承AbstractList类,并且实现了List,RandomAccess,Clonable,Serializable四个接口。
LinkedList,继承AbstractSequentialList类,并且实现了List,Deque,Clonable,Serializable四个接口。
他们共同点是都实现了List,Clone,Serialzable三个接口。

1.2 接口意义

List接口提供一些常用的增删改查的方法。
Cloneable是个标记接口,实现这个接口的类表示支持类的克隆。
Serializable接口表示当前类支持序列化。

1.3 不同(附加)

ArrayList继承的是AbstractList类,而AbstractList实现了 List 的一些位置相关操作(比如 get,set,add,remove),但不支持添加和替换。ArrayList的底层是通过数组来实现的。
ArrayList实现接口RandomAccess,RandomAccess接口类似Cloneable是一种标记接口,标记二分法查询数据是采用for遍历还是迭代器遍历。

LinkedList继承的是AbstractSequentialList类,该类是AbstractList子类,是不同于AbstractList的另一套增删改查,底层是通过迭代器来完成相关操作的,而且LInkedList集合类底层是通过双端链表实现的,属于顺序访问的集合类。
LinkedList实现的接口,Deque是一个双端队列,LinkedList底层是通过双端链表实现的,所以能够实现数据结构的队列和栈。

参考:https://www.jianshu.com/p/bc5d1de14e9a添加链接描述

2 arrayList 的底层实现?

参考:https://blog.csdn.net/leinminna/article/details/105110253

3 LinkedList 的底层实现?

3.1 数据结构
LinkedList是基于双向链表(环形链表)的数据结构实现的,链表是可以占用一段不连续的内存空间,双向链表有前驱节点和后驱节点,里面存储的是上一个元素和后一个元素所在的位置。
3.2 set
3.3 扩容
3.4 get
3.5 remove
3.6 遍历
3.7异常

4 遍历有哪些方法?内部实现原理?
5 各种遍历方法性能比较?及适用场景?

更新中。。。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值