• 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快。
    获取指定下标的元素,先判断头尾指针谁离得近,用近的指针去移动。
     
  • 相关阅读:
    Redis源码分析(二十一)--- anet网络通信的封装
    leetcode 总结part1
    leetcode String to Integer (atoi)
    leetcode 165. Compare Version Numbers
    leetcode 189. Rotate Array
    leetcode 168. Excel Sheet Column Title
    leetcode 155. Min Stack
    leetcode 228. Summary Ranges
    leetcode 204. Count Primes
    leetcode 6. ZigZag Conversion
  • 原文地址:https://www.cnblogs.com/shoulinniao/p/11965323.html
Copyright © 2020-2023  润新知