RandomAccess接口里面并没有具体的实现,那有这个接口的作用是什么呢?
其实我们知道List集合有常用的两个类型,ArrayList和LinkedList,ArrayList的底层是数组,支持随机访问,而LinkedList是基于链表,不能通过索引下标随机访问,得通过遍历的方式访问到索引下标指向的元素。所以RandomAccess接口主要目的就是标识这个类是否支持随机访问。
RandomAccess在jdk中的应用
在JDK源码全局搜索"instanceof RandomAccess"关键字,发现在Collections工具类中使用的比较多。如Collections的binarySearch方法中判断集合是否是RandomAccess类型,如果是就调用indexedBinarySearch,下面看下这个方法
区别就在于获取midVal的方式,RandomAccess类型的集合可以直接通过下标获取,而类似LinkedList这种基于链表的集合则需要向前或者向后遍历每个元素,直到查找到下标元素为止。
综上,RandomAccess接口主要目的就是标识这个类是否支持随机访问。
写博客主要是对自己看源码过程的一个总结感悟,如有不足或错误的地方,请大家评论区批评指正~ 😃