LinkedList的原理和方法介绍、使用

目录

 

LinkedList底层是双向链表

变量

构造方法

public LinkedList()

public LinkedList(Collection c)

常用方法,不讨论最简单的add和remove

public void addFirst(E e):在把元素添加在链表头

public void addLast(E e):添加在链表结尾

public void clear():将数据全部置空,size=0

public Object clone() :克隆出一个全新的链表,对克隆的链表修改,不会影响原来的链表

public boolean contains(Object o):对象包含

public Iterator descendingIterator():链表反序迭代

public E element():获取首节点的元素

public E getFirst():获取首节点的值

public E getLast():获取尾结点

public int indexOf(Object o):元素在链表中第一次出现的位置

public int lastIndexOf(Object o):元素在链表中最后一次出现的位置

public ListIterator listIterator(int index):迭代的时候,能对链表就行修改

offer、offerLast、offerLast,将制定的元素加载到链表尾,链表尾,链表头

public E peek(),peekFirst(),peekLast():找链表首节点,首节点,尾节点

public E poll();找到首节点,并删除

public E pollFirst();找到首节点,并删除首节点

public E pollLast()找到尾节点,并删除尾节点

public E pop():获取首节点,并删除首节点

public void push(E e):加入首节点

public boolean removeLastOccurrence(Object o):移除最后出现的

Object[] toArray():返回Object[] toArray(),无法强转

public T[] toArray(T[] a) :转换数据到指定数组


LinkedList底层是双向链表

    private static class Node<E> {
        E item;//当前元素
        Node<E> next;下一个元素
        Node<E> prev;上一个元素

        Node(Node<E> prev, E element, Node<E> next) {
            this.item = element;
            this.next = next;
            this.prev = prev;
        }
    }

变量

transient Node<E> first;
链表首节点
transient Node<E> last;
链表尾节点
transient int size = 0;
链表存储数据量

构造方法

public LinkedList()

不做任何处理

public LinkedList(Collection<? extends E> c)

通过list构造

public class Test {
    public static void main(String[] args) {
        ArrayList<Integer> list = new ArrayList<>();
        list.add(1);
        list.add(3);
        list.add(4);
        list.add(2);
        List<Integer> linkedList = new LinkedList<>(list);
        System.out.println(linkedList);
    }
}

通过LinkedList构造

public class Test {
    public static void main(String[] args) {
        List<Integer> list = new LinkedList<>();
        list.add(1);
        list.add(3);
        list.add(4);
        list.add(2);
        List<Integer> linkedList = new LinkedList<>(list);
        System.out.println(linkedList);
    }
}

常用方法,不讨论最简单的add和remove

跑一遍之后,发现好多方法是重复的

public void addFirst(E e):在把元素添加在链表头

一定要使用完成类声明LinkedList<Integer> linkedList = new LinkedList<>(list);,使用LinkedList<Integer> linkedList = new LinkedList<>(list);声明无法使用AddFirst()

public class Test {
    public static void main(String[] args) {
        LinkedList<Integer> list = new LinkedList<>();
        list.add(1);
        list.add(3);
        list.add(4);
        list.add(2);
        list.addFirst(6);
        System.out.println(list);
    }
}

结果:

[6, 1, 3, 4, 2]

public void addLast(E e):添加在链表结尾

public class Test {
    public static void main(String[] args) {
        LinkedList<Integer> list = new LinkedList<>();
        list.add(1);
        list.add(3);
        list.add(4);
        list.add(2);
        list.addLast(6);
        System.out.println(list);
    }
}

结果:

[1, 3, 4, 2, 6]

public void clear():将数据全部置空,size=0

public Object clone() :克隆出一个全新的链表,对克隆的链表修改,不会影响原来的链表

public class Test {
    public static void main(String[] args) {
        LinkedList<Integer> list = new LinkedList<>();
        list.add(1);
        list.add(3);
        list.add(4);
        list.add(2);
        LinkedList<Integer> clone = (LinkedList<Integer>)list.clone();
        clone.remove(1);
        System.out.println(list);
        System.out.println(clone);
    }
}

结果:

[1, 3, 4, 2]
[1, 4, 2]

public boolean contains(Object o):对象包含

public class Test {
    public static void main(String[] args) {
        LinkedList<Integer> list = new LinkedList<>();
        list.add(1);
        list.add(3);
        list.add(4);
        list.add(2);
        System.out.println(list.contains(1));
        System.out.println(list.contains(0));
    }
}

结果:

true
false

public Iterator<E> descendingIterator():链表反序迭代

public class Test {
    public static void main(String[] args) {
        LinkedList<Integer> list = new LinkedList<>();
        list.add(1);
        list.add(3);
        list.add(4);
        list.add(2);
        Iterator<Integer> integerIterator = list.descendingIterator();
        while(integerIterator.hasNext()){
            System.out.println(integerIterator.next());
        }
        Iterator<Integer> iterator = list.iterator();
        while(iterator.hasNext()){
            System.out.println(iterator.next());
        }
    }
}

结果:

2
4
3
1
1
3
4
2

public E element():获取首节点的元素

public class Test {
    public static void main(String[] args) {
        LinkedList<Integer> list = new LinkedList<>();
        list.add(1);
        list.add(3);
        list.add(4);
        list.add(2);
        System.out.println(list.element());
    }
}

结果:首节点是1,所以输入1

1

public E getFirst():获取首节点的值

public class Test {
    public static void main(String[] args) {
        LinkedList<Integer> list = new LinkedList<>();
        list.add(1);
        list.add(3);
        list.add(4);
        list.add(2);
        System.out.println(list.getFirst());
    }
}

结果:首节点是1,输入1

1

public E getLast():获取尾结点

public class Test {
    public static void main(String[] args) {
        LinkedList<Integer> list = new LinkedList<>();
        list.add(1);
        list.add(3);
        list.add(4);
        list.add(2);
        System.out.println(list.getLast());
    }
}

结果:尾结点是2,输出2

2

public int indexOf(Object o):元素在链表中第一次出现的位置

public class Test {
    public static void main(String[] args) {
        LinkedList<Integer> list = new LinkedList<>();
        list.add(1);
        list.add(3);
        list.add(4);
        list.add(2);
        System.out.println(list.indexOf(3));
    }
}

结果:下标从0开始,没有返回-1

1

public int lastIndexOf(Object o):元素在链表中最后一次出现的位置

public class Test {
    public static void main(String[] args) {
        LinkedList<Integer> list = new LinkedList<>();
        list.add(1);
        list.add(3);
        list.add(4);
        list.add(3);
        System.out.println(list.indexOf(5));
        System.out.println(list.lastIndexOf(3));
    }
}

结果:

-1
3

public ListIterator<E> listIterator(int index):迭代的时候,能对链表就行修改

public class Test {
    public static void main(String[] args) {
        LinkedList<Integer> list = new LinkedList<>();
        list.add(1);
        list.add(3);
        list.add(4);
        list.add(3);
        ListIterator<Integer> integerListIterator = list.listIterator();
        while(integerListIterator.hasNext()){
            System.out.println(integerListIterator.next());
            integerListIterator.set(8);
            integerListIterator.add(6);
        }
        System.out.println(list);
    }
}

结果:

1
3
4
3
[8, 6, 8, 6, 8, 6, 8, 6]

offer、offerLast、offerLast,将制定的元素加载到链表尾,链表尾,链表头

public E peek(),peekFirst(),peekLast():找链表首节点,首节点,尾节点

public class Test {
    public static void main(String[] args) {
        LinkedList<Integer> list = new LinkedList<>();
        list.add(1);
        list.add(3);
        list.add(4);
        list.add(3);
        System.out.println(list.peek());
        System.out.println(list.peekFirst());
        System.out.println(list.peekLast());
        System.out.println(list);
    }
}

结果:

1
1
3
[1, 3, 4, 3]

public E poll();找到首节点,并删除

public class Test {
    public static void main(String[] args) {
        LinkedList<Integer> list = new LinkedList<>();
        list.add(1);
        list.add(3);
        list.add(4);
        list.add(3);
        System.out.println(list.poll());
        System.out.println(list);
    }
}

结果:

1
[3, 4, 3]

public E pollFirst();找到首节点,并删除首节点

public E pollLast()找到尾节点,并删除尾节点

public E pop():获取首节点,并删除首节点

public class Test {
    public static void main(String[] args) {
        LinkedList<Integer> list = new LinkedList<>();
        list.add(1);
        list.add(3);
        list.add(4);
        list.add(3);
        System.out.println(list.pop());
        System.out.println(list.pop());
        System.out.println(list.pop());
        System.out.println(list.pop());
        System.out.println(list);
    }
}

结果:

1
3
4
3
[]

public void push(E e):加入首节点

public class Test {
    public static void main(String[] args) {
        LinkedList<Integer> list = new LinkedList<>();
        list.add(1);
        list.add(3);
        list.add(4);
        list.add(3);
        list.push(6);
        list.push(7);
        list.push(8);
        System.out.println(list);
    }
}

结果

[8, 7, 6, 1, 3, 4, 3]
public boolean removeFirstOccurrence(Object o):移除第一个出现的元素
public class Test {
    public static void main(String[] args) {
        LinkedList<Integer> list = new LinkedList<>();
        list.add(1);
        list.add(3);
        list.add(4);
        list.add(3);
        list.removeFirstOccurrence(3);
        System.out.println(list);
    }
}

结果

[1, 4, 3]

public boolean removeLastOccurrence(Object o):移除最后出现的

public class Test {
    public static void main(String[] args) {
        LinkedList<Integer> list = new LinkedList<>();
        list.add(1);
        list.add(3);
        list.add(4);
        list.add(3);
        list.removeLastOccurrence(3);
        System.out.println(list);
    }
}

结果:

[1, 3, 4]

Object[] toArray():返回Object[] toArray(),无法强转

public class Test {
    public static void main(String[] args) {
        LinkedList<Integer> list = new LinkedList<>();
        list.add(1);
        list.add(3);
        list.add(4);
        list.add(3);
        Object[] objects = list.toArray();
        System.out.println(objects[0]);
        System.out.println(objects[1]);
        System.out.println(objects[2]);
        System.out.println(objects[3]);
    }
}

结果

1
3
4
3

public <T> T[] toArray(T[] a) :转换数据到指定数组

public class Test {
    public static void main(String[] args) {
        LinkedList<Integer> list = new LinkedList<>();
        list.add(1);
        list.add(3);
        list.add(4);
        list.add(3);
        Integer[] array = new Integer[list.size()];
        list.toArray(array);
        System.out.println(array[0]);
        System.out.println(array[1]);
        System.out.println(array[2]);
        System.out.println(array[3]);
    }
}

结果

1
3
4
3

 

 

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值