Java编程教程-Java LinkedList类

# Java LinkedList类

图片

Java LinkedList类使用双向链表来存储元素。它提供了链表数据结构。它继承了AbstractList类并实现了List和Deque接口。

关于Java LinkedList的重要要点如下:

  • Java LinkedList类可以包含重复的元素。

  • Java LinkedList类维护插入顺序。

  • Java LinkedList类是非同步的。

  • 在Java LinkedList类中,操作速度较快,因为不需要进行元素的移动。

  • Java LinkedList类可用作列表、栈或队列。

# LinkedList类的层次结构

如上图所示,Java LinkedList类扩展了AbstractSequentialList类并实现了List和Deque接口。

# 双向链表

在双向链表中,我们可以从两端添加或删除元素。

图片

 

# LinkedList类的声明

让我们看一下java.util.LinkedList类的声明。

public class LinkedList<E> extends AbstractSequentialList<E> implements List<E>, Deque<E>, Cloneable, Serializable

# Java LinkedList的构造函数

构造函数描述

LinkedList()

用于构建一个空列表。

LinkedList(Collection<? extends E> c)

用于使用指定集合中的元素构建一个列表,元素的顺序是由集合的迭代器返回的顺序。

# Java LinkedList的方法

方法描述

boolean add(E e)

将指定元素追加到列表末尾。

void add(int index, E element)

在列表中的指定位置插入指定元素。

boolean addAll(Collection<? extends E> c)

将指定集合中的所有元素追加到列表末尾,按照指定集合的迭代器返回的顺序。

boolean addAll(int index, Collection<? extends E> c)

从指定位置开始,将指定集合中的所有元素追加到列表中。

void addFirst(E e)

在列表的开头插入指定元素。

void addLast(E e)

在列表的末尾追加指定元素。

void clear()

从列表中删除所有元素。

Object clone()

返回一个ArrayList的浅拷贝。

boolean contains(Object o)

如果列表包含指定的元素,则返回true。

Iterator<E> descendingIterator()

返回一个反序遍历列表的迭代器。

E element()

获取列表的第一个元素。

E get(int index)

返回列表中指定位置的元素。

E getFirst()

返回列表中的第一个元素。

E getLast()

返回列表中的最后一个元素。

int indexOf(Object o)

返回列表中首次出现指定元素的索引,如果列表不包含该元素,则返回-1。

int lastIndexOf(Object o)

返回列表中最后一次出现指定元素的索引,如果列表不包含该元素,则返回-1。

ListIterator<E> listIterator(int index)

返回从列表中指定位置开始的元素的列表迭代器。

boolean offer(E e)

将指定元素添加为列表的最后一个元素。

boolean offerFirst(E e)

将指定元素插入到列表的开头。

boolean offerLast(E e)

将指定元素插入到列表的末尾。

E peek()

获取列表的第一个元素。

E peekFirst()

获取列表的第一个元素,如果列表为空,则返回null。

E peekLast()

获取列表的最后一个元素,如果列表为空,则返回null。

E poll()

获取并删除列表的第一个元素。

E pollFirst()

获取并删除列表的第一个元素,如果列表为空,则返回null。

E pollLast()

获取并删除列表的最后一个元素,如果列表为空,则返回null。

E pop()

从列表表示的堆栈中弹出一个元素。

void push(E e)

将一个元素推入到列表表示的堆栈中。

E remove()

获取并删除列表的第一个元素。

E remove(int index)

删除列表中指定位置的元素。

boolean remove(Object o)

删除列表中首次出现的指定元素。

E removeFirst()

删除并返回列表中的第一个元素。

boolean removeFirstOccurrence(Object o)

删除列表中首次出现的指定元素(从头到尾遍历列表时)。

E removeLast()

删除并返回列表中的最后一个元素。

boolean removeLastOccurrence(Object o)

删除列表中最后一次出现的指定元素(从头到尾遍历列表时)。

E set(int index, E element)

使用指定元素替换列表中指定位置的元素。

Object[] toArray()

返回包含列表中所有元素的数组,按照适当的顺序(从第一个元素到最后一个元素)排序。

<T> T[] toArray(T[] a)

返回包含适当顺序(从第一个元素到最后一个元素)的列表中所有元素的数组;返回数组的运行时类型是指定数组的运行时类型。

int size()

返回列表中的元素数。

# Java LinkedList示例

1. import java.util.*;2. public class LinkedList1 {3.     public static void main(String args[]) {4.5.         LinkedList<String> al = new LinkedList<String>();6.         al.add("Ravi");7.         al.add("Vijay");8.         al.add("Ravi");9.         al.add("Ajay");10.11.        Iterator<String> itr = al.iterator();12.        while (itr.hasNext()) {13.            System.out.println(itr.next());14.        }15.    }16.}

输出:

RaviVijayRaviAjay

# Java LinkedList示例-添加元素

这里我们看到了不同的添加元素的方法。

1. import java.util.*;2. public class LinkedList2 {3.     public static void main(String args[]) {4.         LinkedList<String> ll = new LinkedList<String>();5.         System.out.println("Initial list of elements: " + ll);6.         ll.add("Ravi");7.         ll.add("Vijay");8.         ll.add("Ajay");9.         System.out.println("After invoking add(E e) method: " + ll);10.        // 在特定位置添加元素11.        ll.add(1, "Gaurav");12.        System.out.println("After invoking add(int index, E element) method: " + ll);13.        LinkedList<String> ll2 = new LinkedList<String>();14.        ll2.add("Sonoo");15.        ll2.add("Hanumat");16.        // 将第二个列表的元素添加到第一个列表中17.        ll.addAll(ll2);18.        System.out.println("After invoking addAll(Collection<? extends E> c) method: " + ll);19.        LinkedList<String> ll3 = new LinkedList<String>();20.        ll3.add("John");21.        ll3.add("Rahul");22.        // 将第二个列表的元素添加到第一个列表中的特定位置23.        ll.addAll(1, ll3);24.        System.out.println("After invoking addAll(int index, Collection<? extends E> c) method: " + ll);25.        // 在第一个位置添加一个元素26.        ll.addFirst("Lokesh");27.        System.out.println("After invoking addFirst(E e) method: " + ll);28.        // 在最后一个位置添加一个元素29.        ll.addLast("Harsh");30.        System.out.println("After invoking addLast(E e) method: " + ll);31.    }32.}

输出:

Initial list of elements: []After invoking add(E e) method: [Ravi, Vijay, Ajay]After invoking add(int index, E element) method: [Ravi, Gaurav, Vijay, Ajay]After invoking addAll(Collection<? extends E> c) method: [Ravi, Gaurav, Vijay, Ajay, Sonoo, Hanumat]After invoking addAll(int index, Collection<? extends E> c) method: [Ravi, John, Rahul, Gaurav, Vijay, Ajay, Sonoo, Hanumat]After invoking addFirst(E e) method: [Lokesh, Ravi, John, Rahul, Gaurav, Vijay, Ajay, Sonoo, Hanumat]After invoking addLast(E e) method: [Lokesh, Ravi, John, Rahul, Gaurav, Vijay, Ajay, Sonoo, Hanumat, Harsh]

# Java LinkedList示例-删除元素

这里我们看到了不同的删除元素的方法。

1. import java.util.*;2. public class LinkedList3 {3.     public static void main(String[] args) {4.         LinkedList<String> ll = new LinkedList<String>();5.         ll.add("Ravi");6.         ll.add("Vijay");7.         ll.add("Ajay");8.         ll.add("Anuj");9.         ll.add("Gaurav");10.        ll.add("Harsh");11.        ll.add("Virat");12.        ll.add("Gaurav");13.        ll.add("Harsh");14.        ll.add("Amit");15.        System.out.println("Initial list of elements: " + ll);16.        // 从链表中删除特定元素17.        ll.remove("Vijay");18.        System.out.println("After invoking remove(object) method: " + ll);19.        // 根据特定位置删除元素20.        ll.remove(0);21.        System.out.println("After invoking remove(index) method: " + ll);22.        LinkedList<String> ll2 = new LinkedList<String>();23.        ll2.add("Ravi");24.        ll2.add("Hanumat");25.        // 向链表中添加新元素26.        ll.addAll(ll2);27.        System.out.println("Updated list: " + ll);28.        // 从链表中删除所有新元素29.        ll.removeAll(ll2);30.        System.out.println("After invoking removeAll() method: " + ll);31.        // 从链表中删除第一个元素32.        ll.removeFirst();33.        System.out.println("After invoking removeFirst() method: " + ll);34.        // 从链表中删除最后一个元素35.        ll.removeLast();36.        System.out.println("After invoking removeLast() method: " + ll);37.        // 从链表中删除第一个出现的元素38.        ll.removeFirstOccurrence("Gaurav");39.        System.out.println("After invoking removeFirstOccurrence() method: " + ll);40.        // 从链表中删除最后一个出现的元素41.        ll.removeLastOccurrence("Harsh");42.        System.out.println("After invoking removeLastOccurrence() method: " + ll);43.44.        // 从链表中删除所有元素45.        ll.clear();46.        System.out.println("After invoking clear() method: " + ll);47.    }48.}

输出:

Initial list of elements: [Ravi, Vijay, Ajay, Anuj, Gaurav, Harsh, Virat, Gaurav, Harsh, Amit]After invoking remove(object) method: [Ravi, Ajay, Anuj, Gaurav, Harsh, Virat, Gaurav, Harsh, Amit]After invoking remove(index) method: [Ajay, Anuj, Gaurav, Harsh, Virat, Gaurav, Harsh, Amit]Updated list: [Ajay, Anuj, Gaurav, Harsh, Virat, Gaurav, Harsh, Amit, Ravi, Hanumat]After invoking removeAll() method: [Ajay, Anuj, Gaurav, Harsh, Virat, Gaurav, Harsh, Amit]After invoking removeFirst() method: [Gaurav, Harsh, Virat, Gaurav, Harsh, Amit]After invoking removeLast() method: [Gaurav, Harsh, Virat, Gaurav, Harsh]After invoking removeFirstOccurrence() method: [Harsh, Virat, Gaurav, Harsh]After invoking removeLastOccurrence() method: [Harsh, Virat, Gaurav]After invoking clear() method: []

# Java LinkedList示例-反转元素列表

1. import java.util.*;2. public class LinkedList4 {3.     public static void main(String args[]) {4.         LinkedList<String> ll = new LinkedList<String>();5.         ll.add("Ravi");6.         ll.add("Vijay");7.         ll.add("Ajay");8.         // 以相反的顺序遍历元素列表9.         Iterator i = ll.descendingIterator();10.        while (i.hasNext()) {11.            System.out.println(i.next());12.        }13.    }14.}

输出:

AjayVijayRavi

# Java LinkedList示例-书籍

1. import java.util.*;2. class Book {3.     int id;4.     String name, author, publisher;5.     int quantity;6.     public Book(int id, String name, String author, String publisher, int quantity) {7.         this.id = id;8.         this.name = name;9.         this.author = author;10.        this.publisher = publisher;11.        this.quantity = quantity;12.    }13.}14. public class LinkedListExample {15.    public static void main(String[] args) {16.        // 创建书籍列表17.        List<Book> list = new LinkedList<Book>();18.        // 创建书籍19.        Book b1 = new Book(101, "Let us C", "Yashwant Kanetkar", "BPB", 8);20.        Book b2 = new Book(102, "Data Communications & Networking", "Forouzan", "Mc Graw Hill", 4);21.        Book b3 = new Book(103, "Operating System", "Galvin", "Wiley", 6);22.        // 将书籍添加到列表中23.        list.add(b1);24.        list.add(b2);25.        list.add(b3);26.        // 遍历列表27.        for (Book b : list) {28.            System.out.println(b.id + " " + b.name + " " + b.author + " " + b.publisher + " " + b.quantity);29.        }30.    }31.}

输出:

101 Let us C Yashwant Kanetkar BPB 8102 Data Communications & Networking Forouzan Mc Graw Hill 4103 Operating System Galvin Wiley 6
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值