java集合---LinkedList

作者: 一花一世界yu | 来源:发表于2020-04-20 19:39 被阅读0次

    一、重点知识

    TreeSet里面存储的元素需要是类型相同的,不然无法比较,无法排序

    泛型,指定集合中存储元素的数据类型,保护容器中数据类型的安全

    for循环中,即使i++写在输出语句中,也会改变循环中i的值

    一个\t等于八个空格

    HashMap集合中相同位置上的元素使用单链表连接在一起的,只能从前向后查找

    Vector的遍历方式不同于其他的List集合
    Vector<String> v1 = new Vector<>();
    v1.add("aaa");
    v1.add("bbb");
    v1.add("ccc");
    Enumeration<String> elements = v1.elements();
    while(elements.hasMoreElements()){
    String s = elements.nextElement();
    System.out.println(s);
    }

    栈Stack继承于Vector,实现了先进后出功能,但是LinkedList也能实现此功能

    当数组容量不够进行扩容时
    Vector两倍扩容
    ArrayList1.5倍扩容

    在LinkedList中有很多方法不同但是作用是一样的

    二、重点问题

    1、List有第四种迭代方式,ListIterator是List特所的特有的方法

    hasNxet()----->next();----从前向后迭代

    hasPrevious()----->previous();----从后向前迭代

    迭代器不管哪种类型,初始化后默认指针都在集合的最开始

    ListIterator里面也有hasnext()和next()方法,想使用hasPrevious()----->previous();就得先hasNxet()----->next();使指针移到末尾

    ------如果你想在list集合中遍历两次,用ListIterator这种迭代器就不用创建两个迭代器了

    在集合中我们最常用的是普通for循环

    2、迭代器,每次next都会获取一个对象

    注意点,注意iterator中next()的使用

    Iterator<Course> it1 = courses.iterator();

    while (it1.hasNext()){

        System.out.println(it1.next().courseName + it1.next().score);

    }

    迭代器,每次next都会获取一个对象

    上述代码等于调用了两次next();是错误的

    3.LinkedList底层中用的是双向链表,在内存空间是不连续的,因为是双向链表所以他可以模拟栈和队列这两种数据结构

    LinkedList实现了继承于queue的deque接口所以他多了很多关于队列的方法

    queue是队列 ----->实现了collection接口

    deque双端队列(双端队列,不仅能操控开头,还能操控结尾)

    FIFO队列的存储特点,先进先出(在安卓消息队列方面有所体现)

    LIFO栈得存储特点,后进先出(last in first out)

    模拟队列的方法
    入队offer();
    出队poll();

    模拟栈的方法
    入栈push();
    出栈pop();

    三、课堂知识

    LinkedList集合

    LinkedList集合:底层实现:采用双向链表的结构实现。

     优点:更改集合中的元素,效率很高。

      缺点:遍历集合中的元素,效率相对低。

    queue:队列

    deque:double -ended queue,双端队列

    ​LinkedList实现类,区别于ArrayList,除了实现List接口,还实现了Deque接口。

    ​LinkedList实现类:

        实现的接口:

            List接口----------------------------------->Collection

            Deque(双端队列)接口----->Queue(队列)接口------>Collection

    模拟栈的结构:后进先出(LIFO),栈顶元素,

        push(),压栈,入栈,pop(),弹栈,出栈

    模拟队列的结构:先进先出(FIFO),队头元素

        offer(),poll()

    【扩展知识1】

    数据结构:存储的数据的组织特点。

    线性表,链表,树

    栈:Stack,这种数据结构的特点

    last In First Out,简称LIFO,后进先出。

    队列:queue,

    First in First out,简称FIFO,先进先出。

    【扩展知识2】

    Vector:向量

    对比ArrayList,LinkedList,Vector实现类

    A:ArrayList,底层采用数组结构的实现的。(内存中连续空间)。jdk1.2

        只实现了List接口,功能都是List接口中规定的。

        优缺点:

            优点:遍历访问元素,效率很高

            缺点:插入或删除元素,效率相对低。

    B:LinkedList,底层采用双向链表结构实现的。(元素在内存中不挨着,元素之间的指向)。jdk1.2

        实现了List接口的同时,还实现了Deque接口,所以有这两个接口中的功能。

        优缺点:

            优点:插入或删除元素,效率很高。

            缺点:遍历访问元素,效率相对低。

    注意点:

        如果一个集合,频繁的添加或删除元素,建议选择LinkedList。

        如果一个集合,绝大多数的操作就是遍历查询,建议选择ArrayList。

        如果要模拟栈,队列等结构,建议选择LinkedList。

    C:Vector,是ArrayList的前身。也是数组的结构。古老的类。从jdk1.0的版本就有了。

        线程安全,效率低,后来被ArrayList替代了。

        ArrayList和LinkedList都是线程不安全的,效率高。Collections工具类,可以获取线程安全的集合。

    相关文章

      网友评论

        本文标题:java集合---LinkedList

        本文链接:https://www.haomeiwen.com/subject/uhejihtx.html