打开ArrayList和LinkedList的源码后会发现ArrayList实现了一个RandomAccess接口而LinkedList没有
public class ArrayList<E> extends AbstractList<E>
implements List<E>, RandomAccess, Cloneable, java.io.Serializable
public class LinkedList<E>
extends AbstractSequentialList<E>
implements List<E>, Deque<E>, Cloneable, java.io.Serializable
为什么要这样呢?
打开RandomAccess接口
发现这个接口没有内容,这样的接口叫标志接口
那么这个接口标志了什么内容呢?
我们可以知道的是ArrayList和LinkedList这两者的底层实现是不同的.
ArrayList底层是用数组实现的,这种实现方法使得ArrayList通过随机遍历的速度非常快,但是通过迭代器的方式访问却很慢.而LinkList却是反过来的.
那么为什么要用这个标志接口呢?
开发的时候有时候并不知道一个API返回的类型是什么,比如说从数据库中取得一系列的数据,但是我们却并不知道其放在什么数据结构中,也就不知道效率高的遍历方法是什么,那么就可以通过 instanceof 关键字来判断是否实现了该接口,从而知道用什么遍历方法.