zoukankan      html  css  js  c++  java
  • Java LinkedList用法

    本想找队列Queue,发现那是一个接口,LinkedList实现了Queue接口,可以当作队列来用。

    一、概述
    1. Java的LinkedList是一种常用的数据容器,与ArrayList相比,LinkedList的增删操作效率更高,而查改操作效率较低。
    2. LinkedList 实现了Queue接口,能当作队列使用。
    3. LinkedList 实现了List 接口,能对它进行列表操作。
    4. LinkedList 实现了Deque 接口,即能将LinkedList当作双端队列使用。
    5. LinkedList 实现了Cloneable接口,能克隆。
    6. LinkedList 实现了java.io.Serializable接口,这意味着LinkedList支持序列化,能通过序列化去传输。
    二、构造方法
    1. LinkedList<类> list = new LinkedList<类>();
    2. LinkedList<类> list = new LinkedList(Collection<? extends E> c); 使用一个集合创建一个新的linkedList。
    三、常用方法
    1.增
    • public boolean add(E e),链表末尾添加元素,返回是否成功;
    • public void add(int index, E element),向指定位置插入元素;
    • public boolean addAll(Collection<? extends E> c),将一个集合的所有元素添加到链表后面,返回是否成功;
    • public boolean addAll(int index, Collection<? extends E> c),将一个集合的所有元素添加到链表的指定位置后面,返回是否成功;
    • public void addFirst(E e),添加到第一个元素;
    • public void addLast(E e),添加到最后一个元素;
    • public boolean offer(E e),向链表末尾添加元素,返回是否成功;
    • public boolean offerFirst(E e),头部插入元素,返回是否成功;
    • public boolean offerLast(E e),尾部插入元素,返回是否成功;
    2.删
    • public void clear(),清空链表;
    • public E removeFirst(),删除并返回第一个元素;
    • public E removeLast(),删除并返回最后一个元素;
    • public boolean remove(Object o),删除某一元素,返回是否成功;
    • public E remove(int index),删除指定位置的元素;
    • public E poll(),删除并返回第一个元素;
    • public E remove(),删除并返回第一个元素;
    3.查
    • public boolean contains(Object o),判断是否含有某一元素;
    • public E get(int index),返回指定位置的元素;
    • public E getFirst(), 返回第一个元素;
    • public E getLast(),返回最后一个元素;
    • public int indexOf(Object o),查找指定元素从前往后第一次出现的索引;
    • public int lastIndexOf(Object o),查找指定元素最后一次出现的索引;
    • public E peek(),返回第一个元素;
    • public E element(),返回第一个元素;
    • public E peekFirst(),返回头部元素;
    • public E peekLast(),返回尾部元素;
    4.改
    • public E set(int index, E element),设置指定位置的元素;
    5.遍历
            for (int size = linkedList.size(), i = 0; i < size; i++) {
                System.out.println(linkedList.get(i));
            }
            for (String str: linkedList) {
                System.out.println(str);
            }
            Iterator iter = linkedList.iterator();
            while (iter.hasNext()) {
                System.out.println(iter.next());
            }
    6.其他
    • public Object clone(),克隆该列表;
    • public Iterator<E> descendingIterator(),返回倒序迭代器;
    • public int size(),返回链表元素个数;
    • public ListIterator<E> listIterator(int index),返回从指定位置开始到末尾的迭代器;
    • public Object[] toArray(),返回一个由链表元素组成的数组;
    • public <T> T[] toArray(T[] a),返回一个由链表元素转换类型而成的数组;
     
    参考:https://www.jianshu.com/p/e1132ab06b0e

     
    补:
    底层数据结构是双向链表,与ArrayList相比,LinkedList的增删操作效率更高,而查改操作效率较低。何也?
    • 查改指定元素,需要指针不断移动,直到找到那个元素,而数组是通过下标直接定位,所以LinkedList查找比较慢。
    • 增删则是把单个节点拔掉,再用指针前后连接起来,而ArrayList需要将后面的全部复制到前面来覆盖。
    从数据结构上看是这样平均的效率,但不是绝对的,如果每次在末尾增加元素,肯定是ArrayList快,如果是在头部那就是LinkedList快。
    获取指定下标的元素,先判断头尾指针谁离得近,用近的指针去移动。
     
  • 相关阅读:
    Netty实现Http客户端
    Netty实现Http服务端
    Netty实现Tcp客户端
    Netty实现Tcp服务端
    MySQL进阶系列:一文详解explain
    spring boot 获取运行时的yml里的active配置
    eureka 注册中心添加认证
    zuul 负载
    jenkins spring cloud
    秒杀系统如何设计?
  • 原文地址:https://www.cnblogs.com/shoulinniao/p/11965323.html
Copyright © 2011-2022 走看看