list接口的链接列表实现。
在阅读api文档时,遇到了以下一些难以理解的名词,之前未曾接触过它们:堆栈、队列、双端队列
堆栈:
“堆栈是两种数据结构。堆栈都是一种数据项按序排列的数据结构,只能在一端(称为栈顶(top))对数据项进行插入和删除”。(百度百科)
从上面的一段话中我们可以知道:
*堆和栈是两种不同的数据结构
*堆和栈都是有序的,那么是否可以使用索引呢?
*只能在栈顶对数据进行插入和删除。
堆栈——子弹弹夹,先装入的子弹后出弹夹。
“堆栈中的物体具有一个特性: 最后一个放入堆栈中的物体总是被最先拿出来, 这个特性通常称为后进先出(LIFO)队列。”
“ 堆栈中定义了一些操作。 两个最重要的是PUSH和POP。 PUSH操作在堆栈的顶部加入一 个元素。POP操作相反, 在堆栈顶部移去一个元素, 并将堆栈的大小减一。”
其实,这两个操作的名字就是源自弹夹模型。
“栈(stack)与堆(heap)都是Java用来在内存中存放数据的地方。”
“Java自动管理栈和堆。”
“栈的优势是,存取速度比堆要快,仅次于直接位于CPU中的寄存器。”
栈是一种能够实现快速读取的数据结构,比堆要块。java如何高效利用栈的快速读取特性呢?
“存在栈中的数据大小与生存期必须是确定的,缺乏灵活性。另外,栈数据在多个线程或者多个栈之间是不可以共享的,但是在栈内部多个值相等的变量是可以指向一个地址的。”
“堆的优势是可以动态地分配内存大小,生存期也不必事先告诉编译器,Java的垃圾收集器会自动收走这些不再使用的数据。但缺点是,由于要在运行时动态分配内存,存取速度较慢。”
堆比较灵活,但是存取速度慢;栈相对不够灵活,但是存取速度快。