`

源码深研随笔

阅读更多
今天在研究JDK源码的时候说复习复习一下集合那一块的代码,
看到了LinkedList的时候,在entry()中看到了这么一句
if (index < (size >> 1))

说实话,>>这个我见过,看Java编程思想的时候,不过那个时候真没有用心注意这个东西,
一笔带过的就完了.
结果现在看见他,完全是不认识,后来经过百度.
方才明白了他的作用,具体的讲解见我上一篇博客《JAVA移位运算符》

然后entry这块方法次啊算是彻底明白了:
/**
	 * 根据指定下标返回该下标的数据
	 */
	private Entry<E> entry(int index) {
		// 首先判断index的有效性,如无效,抛出异常
		if (index < 0 || index >= size)
			throw new IndexOutOfBoundsException("Index: " + index + ", Size: "
					+ size);
		Entry<E> e = header;

		// 当index<(1/2)List.size()的时候,正序查找,反之,逆序查找
		// 这样做的用途就是效率的提升,当数据量小的时候可能不是很明显
		// 但是试想,当这个List数据量达到十W,百W的时候,这样的查找效率就明显高太多了。
		if (index < (size >> 1)) {
			for (int i = 0; i <= index; i++)
				e = e.next;
		} else {
			for (int i = size; i > index; i--)
				e = e.previous;
		}
		return e;
	}
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics