集合
Arraylist与LinkedList的区别
ArrayList
是一个动态数组,但对数据的增加和删除比较复杂,它是基于索引的数据接口,随机访问较为便捷,它的底层是数组,是非同步的。
LinkedList
是以链表形式保存集合中的元素,所以随机访问的性能较差,但插入删除时不需要像ArrayList
那样重新计算大小和更新索引。
Vector与Stack
Vector与ArrayList
相似,但是Vector是$\textcolor{Red}{同步}$的。所以说Vector是线程安全的动态数组。它的操作与ArrayList
几乎一样。
Stack继承自Vector,实现一个后进先出的堆栈。Stack提供5个额外的方法使得Vector得以被当作堆栈使用。基本的push和pop 方法,还有peek方法得到栈顶的元素,empty方法测试堆栈是否为空,search方法检测一个元素在堆栈中的位置。Stack刚创建后是空栈。
HashMap数据结构
- 底层数据结构,1.7与1.8有何不同?
- 1.7之前是数组+链表,1.8之后是数组+(链表|红黑树)
补充:B树、B+树、红黑树
- B树
B树和平衡二叉树的不同之处是:B树属于多叉树又名平衡多路查找树(查找路径不止两个),数据库索引技术里大量使用着B树和B+树的数据结构。
- B+树
B+树是在B树的基础上又一次的改进,其主要对两个方面进行了提升,一方面是查询的稳定性,另外一方面是在数据排序方面更友好。
-
红黑树
红黑树是每个节点都带有颜色属性的二叉查找树,颜色或红色或黑色。它必须满足下面性质:
- 性质1:每个节点要么是黑色,要么是红色。
- 性质2:根节点是黑色。
- 性质3:每个叶子节点(NIL)是黑色。
- 性质4:每个红色结点的两个子结点一定都是黑色。
- 性质5:任意一结点到每个叶子结点的路径都包含数量相同的黑结点。