以下为个人在复习过程中的笔记整理,从笔记本上挪到博客上也能加深一遍记忆,细节不完整,好歹有个大概的了解。
目录
1、数组
优点:索引查询快,遍历方便;
缺点:只能存储一种元素,增删慢,需要移动其他元素。
2、链表
物理存储上非连续、非顺序的存储结构,逻辑顺序是通过链表的指针地址实现的。
优点:不用初始化容量,可以任意增删且十分方便;
缺点:大量指针域占用额外空间,遍历查找耗时。
链表的分类:
a.单向链表:每个节点包括一个data数据域以及一个指向后继节点的指针域next。
b.双向链表:每个节点包括一个data数据域以及两个分别指向前驱和后继节点的指针域prev和next。
c.循环链表:链表的尾节点的指针域next不指向null,而是指向头节点。
在面试过程中数组和链表的区别是最基本的问题,有时候也会问到“Arraylist和Linkedlist的区别”,其中Arraylist的底层实现是数组,Linkedlist的底层实现的链表,下图摘自:https://blog.csdn.net/weixin_42468526/article/details/81178698
3、栈
一种只能在一端进行操作的线性表,使用先进后出的原则,常用于实现递归功能方面的场景。
在JVM中也有很多关于栈的使用,Java的栈内存由编译器自动分配和释放,生命周期短,且比较小,使用后进先出(LIFO)内存分配规则,速度较快。
Java中有直接封装好的Stack类,可直接进行使用,参考https://www.iteye.com/blog/haoran-10-1490811