基于 Vector 的栈的源码分析
栈也是线性表,但是限定仅在表尾进行插入和删除操作的线性表;做过 Android 的应该知道,Activity 是一个典型的栈结构,它的特点就是后进先出;Stack 的源码很少,因为它的父亲 Vector 都帮它做好了,所以本篇分析主要集中在 Vector 里。
栈也是线性表,但是限定仅在表尾进行插入和删除操作的线性表;做过 Android 的应该知道,Activity 是一个典型的栈结构,它的特点就是后进先出;Stack 的源码很少,因为它的父亲 Vector 都帮它做好了,所以本篇分析主要集中在 Vector 里。
LinkedList 内部采用的是链表的方式存储数据,所以不像 ArrayList ,初始化时需要分配容量,该链表中每一个节点都有一个头指针、一个数据域、一个尾指针,所以是一个双向的链表,与双向循环链表不同,它的第一个节点和最后一个节点没有互相引用,所以 LinkedList 其实还是一个队列,这个作为下下篇分享的内容,本篇主要分析其数据元素的增删改查的源码,基于 JDK 1.8 版本的源码分析。
ArrayList 内部采用数组实现,是一种顺序存储方式,对于它的用法,相信大家都烂熟于心了,但是对它内部数组空间的动态管理,也许还不是很熟悉,所以我这次打算分析一下 ArrayList 的源码,基于 JDK 1.8 的版本。
最近听了这么一段话,说武侠小说里少林寺的和尚们,在入寺时,并不会被授予易筋经、降龙十八掌等武功秘籍,而是给一个菜园,挑水,植菜,养猪,为什么呢?武功有招式和心法之分,招式建立与心法之上,内功深厚,招式才游刃有余。如今的 Android,iOS,Web 开发,说白了就是招式,招式可以千变外化,如果一味的追求招式,忽视内功的话,结果就像天龙八部里的鸠摩智,技术领略的内功修炼,数据结构和算法是很重要的一部分,所以我打算写几篇博客理一下数据结构。
选择排序,即选一个数,与其余的数一一比较,将小的数放在最前面,这样一次一次比较的过程中,逐步将最小的排到最前面。完整的代码可以到我的 GitHub 上查看 Algorithm。
冒泡,即像气泡一样一层一层往上冒,冒泡排序就是相邻两个数比较,大的数往后移,这样一次一次往后移的过程中,逐步将最大的排到右边,形成一个有序的数组。完整的代码可以到我的 GitHub 上查看 Algorithm。