2019独角兽企业重金招聘Python工程师标准>>>

#LiskedList-> public class LinkedList<E> extends AbstractSequentialList<E> implements List<E>, Deque<E>, Cloneable, java.io.Serializable

##构造器

  • public LinkedList(Collection<? extends E> c)
  • public LinkedList() 很熟悉的样子,比ArrayList少了个初始化大小的方法,想想很容易啊,这个是链表,容易扩大小,不是数组!

特点: - 快速失败机制. - Linkedist是由链表实现的,只不过Java中将引用替换成了指针到达了同样的效果,当然,用面向对象来写Node节点比原来大一用面向过程写的那个链表容易很多。 - 从源代码可以看出,LinkedList采用尾查法来插入元素。 - 实现了clone接口何序列化,使用很方便! - 双向链表查找index位置的节点时,有一个加速动作:若index < 双向链表长度的1/2,则从前向后查找; 否则,从后向前查找。(插入,删除快的原因)

##链栈,链队,链双向队列 ###列子

@Testpublic void test1() {LinkedList<Integer> list = new LinkedList<>();list.add(1);list.add(2);list.add(3);System.out.println(list);// get,add,remove first都是对队首的操作!/*  list.addFirst(4);System.out.println(list);System.out.println(list.getFirst());System.out.println(list.removeFirst());System.out.println(list);*/// get,add,remove last 都是对队尾的操作!/* list.addLast(4);System.out.println(list);System.out.println(list.getLast());System.out.println(list.removeLast());System.out.println(list);*///offer,peek,poll first也是对队首的操作/* System.out.println(list.offerFirst(5));System.out.println(list);System.out.println(list.peekFirst());System.out.println(list.pollFirst());System.out.println(list);*///offer,peek,poll Last也是对队尾的操作/* System.out.println(list.offerLast(5));System.out.println(list);System.out.println(list.peekLast());System.out.println(list.pollLast());System.out.println(list);*///as a stack     LIFO/* System.out.println(list.pop());System.out.println(list);list.push(6);System.out.println(list);System.out.println(list.peek());System.out.println(list.pop());System.out.println(list);
*///单向队列!!!  FIFO/*  list.add(4);//入队 ==addLastSystem.out.println(list);System.out.println(list.remove());//出队 ==removeFirstSystem.out.println(list);*///双向队列list.addFirst(4);list.addLast(5);//add=addLastSystem.out.println(list);list.removeFirst();System.out.println(list);list.removeLast();System.out.println(list);list.remove();System.out.println(list);//remove相当于removeFirst}

#Stack

java.lang.Object
↳     java.util.AbstractCollection<E>↳     java.util.AbstractList<E>↳     java.util.Vector<E>↳     java.util.Stack<E>public class Stack<E> extends Vector<E>public class Vector<E>extends AbstractList<E>implements List<E>, RandomAccess, Cloneable, java.io.Serializable

可以看出Stack的 API很简单,但是继承了Vector(和ArrayList差不多,据说线程安全,在下不相信啊,可以不用Synchronized?),可以看出一下几个特点:

  • 具有随机快速访问特点
  • 具有clone功能
  • 序列化
  • 有List和AbstractList已经实现的全部方法。

自己模仿写了个stack,原理差不多。

public class StackDemo {@Testpublic void test() {List<Integer> list = Arrays.asList(1, 2, 3, 4);MyStack<Integer> stack = new MyStack<Integer>(list);//初始大小为5;stack.push(5);stack.push(6);//该扩容了stack.push(7);stack.push(8);//该扩容了System.out.println(stack.peek());//8System.out.println(stack.pop());//8System.out.println(stack.peek());//7}class MyStack<E> {Object[] elems;int size;//数组大小int count;//元素个数int incrementItervel;public MyStack(int size, int incrementItervel) {this.elems = new Object[size];this.size = size;this.incrementItervel = incrementItervel;}public MyStack(int size) {this(size, 2);}public MyStack(Collection<E> collections) {this();addAll(collections);}public MyStack() {this(5);}private void addAll(Collection<E> collections) {Iterator<E> it = collections.iterator();while (it.hasNext()) {ensureCapacity();push(it.next());}}public void ensureCapacity() {while (size <= count) {Object[] objs = new Object[size + incrementItervel];System.arraycopy(elems, 0, objs, 0, elems.length);elems = objs;size += incrementItervel;System.out.println("我扩容了"+size);}}public void push(E e) {ensureCapacity();elems[count++] = e;}public E peek() {return (E) elems[count - 1];}public E pop() {return (E) elems[--count];}}
}
我扩容了7
我扩容了9
8
8
7

转载于:https://my.oschina.net/xd03122049/blog/863124

LinkedList总结+数组栈Stack相关推荐

  1. JAVA学习 API_day05(LinkedList, 二叉树(递归实现), Stack, Set, Map)

    LinkedList, 二叉树, Stack, Set, Map 1. LinkedList 1.Queue与Deque 2.效率比较 2. 二叉树的递归实现 3. Stack 4. Set 1.Ha ...

  2. 用结点实现链表LinkedList,用数组和结点实现栈Stack,用数组和结点链表实现队列Queue

    一,用结点实现链表LinkedList,不用换JavaAPI的集合框架 import java.util.Scanner;public class Main {public static class ...

  3. 在java的实现栈的插入数据_Java实现数据结构栈stack和队列Queue

    回顾JDK提供的集合类 容器(集合)框架如下: 集合类存放于java.util包中.集合类存放的都是对象的引用,而非对象本身. 集合类型主要有3种:set(集).list(列表)和map(映射). C ...

  4. java中队列的类是什么意思_java中LinkedList集合类实现栈和队列要注意什么?

    栈和队列是两种特殊的线性表,它们的逻辑结构和线性表相同,只是其运算规则较线性表有更多的限制,故又称它们为运算受限的线性表. LinkedList数据结构是一种双向的链式结构,每一个对象除了数据本身外, ...

  5. java stack 类 效率_Java中ArrayList、LinkedList、Vector、Stack的比较

    一.介绍 先回顾一下List的框架图 由图中的继承关系,可以知道,ArrayList.LinkedList.Vector.Stack都是List的四个实现类. AbstractList是一个抽象类,它 ...

  6. 【重难点】【Java集合 03】ArrayList、LinkedList、 Vector 和 Stack 的区别、CopyOnWriteArrayList

    [重难点][Java集合 03]ArrayList.LinkedList 和 Vector 的区别.util 包下的 List.CopyOnWriteArrayList 文章目录 [重难点][Java ...

  7. java 栈队列区别是什么意思_Java实现数据结构栈stack和队列Queue是什么?

    回顾JDK提供的集合类 容器(集合)框架如下: 集合类存放于java.util包中.集合类存放的都是对象的引用,而非对象本身. 集合类型主要有3种:set(集).list(列表)和map(映射). C ...

  8. 卜若的代码笔记-数据结构系列-第十章:栈一.顺序栈(数组栈)

    1.栈有两种写法,一种是以数组为躯干的顺序栈,一种是以链表为躯干的链式栈. 1.1栈的操作 1.1.1 出栈pop()函数 允许栈出,栈出之后,顶数据有移除操作. 时间复杂度o(1) 1.1.2 入栈 ...

  9. 一文搞懂栈(stack)、堆(heap)、单片机裸机内存管理malloc

    大家好,我是无际. 有一周没水文了,俗话说夜路走多了难免遇到鬼. 最近就被一个热心网友喷了. 说我的文章没啥营养,所以今天来一篇烧脑的. 哈哈,开个玩笑,不要脸就没人能把我绑架. 主要是最近研发第二代 ...

最新文章

  1. 被神话的大数据——从大数据(big data)到深度数据(deep data)思维转变
  2. c++ skia 判断jpg图片是完整的_python处理图片入门级
  3. VxWorks动态加载
  4. 【转】MFC与.NET的区别
  5. 11月女性时尚行业动态:浏览热度走势曲折 起伏大
  6. oracle label security redition,今天在用11GR2客户端全库导出10GR2版本的数据库时报ORA-00904错误...
  7. 得到css style
  8. FindFirstFile和FindNextFile
  9. 单片机python编程入门_编程入门教程.doc
  10. 【Java】代码加密
  11. 图片特效展示(鼠标移入移除特效)
  12. 分清视频质量中的各种电影视频格式标
  13. 初级使用xenu,windows10系统安装完无法运行
  14. fft算法c语言复数结果是啥,算法-为什么FFT产生复数而不是实数?
  15. OTA三种差分算法安装使用。bsdiff,hdiffpatch,xdelta3
  16. Java在PDF文档中添加或删除页面
  17. 解决jmeter压测试时java.net.SocketException: Socket closed异常
  18. 102.(leaflet篇)leaflet态势标绘-分队战斗行动修改 (燕尾)
  19. 基于混合模型的语音降噪实践
  20. 滑动验证码--前端部分

热门文章

  1. 矿泉水功能突破口-丰收节交易会·李喜贵:遵义谋定水产业
  2. 【NOIP2002】【codevs1098】均分纸牌
  3. Spring的bean管理注解和配置文件混合使用
  4. bzoj3339 Rmq Problem
  5. 一位大学教授学习数学的体会
  6. [上海]LinkCoder第四期活动——Jeffrey Richter:Win 8应用开发与.NET4.5
  7. 丹麦见闻(转自王重合原创)
  8. 产品设计 | 价格理论与用户体验
  9. 2015年度最全微课堂笔记精华包
  10. docker 开发常用命令总结