面试Java中的数据结构

  1. 数组(Array):是由同类元素的集合所组成的数据结构,分配一块连续的内存来存储。]但是它具有一定的局限:若改变数据的大小就需要创建一个新的数组并从原来的数组中拷贝所有元素到新数组中;数组数据在内存中依次连续存储,意味着向数组插入一项要移动的数组中的其他数据。
  2. 链表(Linked list):是一种线性表,但是并不会按线性的的顺序存储数据,而是在每个节点里存到下一个节点的指针。优缺点:链表可以充分利用计算机的内存空间,实现灵活的内存动态管理。失去了数组随机读取的优点,同时增加了节点的指针域,空间开销较大。插入元素时可以达到O(1)的复杂度。查找则需要O(n)。
  3. 栈(stack):线性数据结构,只能访问它的一端(栈顶)来存储或读取数据,被称为后进先出结构,除头尾节点之外,每个元素有一个前驱,一个后继,通常在数据的存储和读取的顺序相反的情况下堆栈是十分有用的,深度优先搜索遍历。
  4. 堆(heap):任意节点小于(或大于)它的所有后裔,最小元(或最大元)在堆的根上。堆总是一颗完全树,即除了最底层,其他层的节点都被元素填满,且最底层尽可能地从左到右填入。
    (ps:heap和stack的区别是栈由系统自动分配使用一级缓存向低地址扩展的数据结构是一块连续的内存区域,不会产生内存碎片,堆需要程序员自己申请并指明大小使用二级缓存是向高地址扩展的数据结构,是不连续的内存区域,容易产生内存碎片;栈的优势是存取速度比堆要快,缺点是栈内存存放的变量(局部变量)生命周期一旦结束就会回收,栈中的数据大小和生存期必须是确定的缺乏灵活性;堆的优点是可以动态地分配内存大小,堆内存放的实体java的垃圾收集器会自动收走这些不再使用的数据缺点是存取速度慢。之所以写这个问题是在面试国防科技大学的计算机学院忘了heap是堆。。。。羞耻啊
  5. 队列(queue):是先进先出的线性表,队列只允许在队尾(rear)进行添加新元素,在另外一端(队头front)进行用于删除操作。(优先级队列:可以用两种链表描述,在一个链表中都是按照顺序进入的,另一个根据优先级顺序将新元素插入到正确的位置。)应用于计算机资源管理、广度优先搜索遍历。
  6. 树:二叉树,平衡二叉树,红黑树,B树,B+树等(有空再写)。

参考书:《数据结构与算法(Java语言版)》 Adam Drozdek著 机械工业出版社 2003.7

猜你喜欢

转载自blog.csdn.net/Xseking/article/details/83112296