上次说完了LinkedList的LinkLast和addLast方法,现在我们来讲讲LinkedList容器中的get方法:
通过源码可以看到,LinkedList容器get方法的实现非常简单,首先调用了checkElementIndex方法,根据名字也可以看出来,这是一个检查下标是否合法的方法

Ctrl+左键让我们看看checkElementIndex的方法是如何实现的?
点进去我们会看到里面有一个判断,判断里调用了isElementIndex方法,我们可以判断出这个方法返回的是布尔值,如果返回true就说明下标合法,如果是false就会抛出下标越界异常。
我们再点进isElementIndex方法进去看看,isElementIndex做了一个简单的判断,判断下标是否大于等于0并且小于容器的长度,size是LinkedList的成员变量,代表的是容器的长度

然后我们再回来看get方法下边有一个node方法,传入了我们的下标,然后调用了成员变量item,这个item代表的是所指定位置的元素,我们点进node方法看看:
通过源码我们可以看到node方法有一个if-else判断,
当下标小于容器长度除以2时,就说明下标所指的节点对象离头节点较近,声明x节点指向头节点,然后通过for循环从左往右找,然后返回对应下标的节点对象
(此时可能有人没看懂右移1是什么意思?学过C语言的应该知道,左移一位代表乘以2,右移1位代表除以2)
当下标大于等于容器长度除以2,就说明下标所指的节点对象离尾节点较近,声明x节点指向尾节点,然后通过for循环从右往左找,然后返回对应下标的节点对象

最后返回指定位置节点对象过后,调用节点对象的item成员变量返回这个节点的元素值,item代表元素

本文详细解析LinkedList容器中get方法的工作原理,包括检查下标合法性、元素定位算法,以及isElementIndex和node方法的实现细节。
1009

被折叠的 条评论
为什么被折叠?



