Java LinkedList示例

时间:2020-02-23 14:37:11  来源:igfitidea点击:

Java中的LinkedList类使用双链表来存储元素,它还提供了一个链表数据结构。它实现了List,就像ArrayList类和Deque接口一样。与数组一样,链表是一种线性数据结构,但与数组不同,链表中的元素是用指针链接在一起的。有一个指针指向第一个元素,通常称为“Head”。最后一个元素指向空元素。此空元素表示链接列表中不再有元素。

了解Java中的LinkedList有什么重要的

Java中的LinkedList类允许重复的元素。

Java中的LinkedList类维护插入顺序。

Java中的LinkedList类是非同步的。

Java中的LinkedList类允许快速操作,因为不需要转换。

Java中的LinkedList类可以是列表、堆栈甚至队列。

LinkedList的局限性

LinkedList类需要比数组更多的内存,因为它们的指针使用存储。

因为我们不能仅仅通过索引访问每个元素,所以链表中的元素很难遍历。

LinkedList的简单说明

Java中的LinkedList

这里是我上面提到的指针,指向第一个元素的指针。第一个元素(以及链表中的每个元素)基本上有两个东西-数据和下一个。数据只是指定元素包含的内容,next是指向next元素的指针。最后,我们可以在图中看到D指向NULL,在链表中,NULL表示列表的结束。

LinkedList中的构造函数

LinkedList():用于构造空列表。

LinkedList(集合<?extends E>c):它用于构造一个包含指定集合的元素的列表,这些元素按集合的迭代器返回的顺序排列。

LinkedList中的方法

  • boolean add(E E):将指定的元素添加到列表的末尾。

  • void add(int index,E element):将指定元素添加到指定位置。

  • void clear():删除列表中的所有元素。

  • Object clone:返回ArrayList的浅副本。

  • boolean contains(Object o) 如果指定的元素在列表中,返回true。

  • Iterator<E>descendingIterator():以相反的顺序返回deque中元素的迭代器。

  • E element():从列表中检索第一个元素。

  • E get(int index):返回列表中指定位置的元素。

  • int indexOf(Object o)返回指定元素在列表中第一次出现的索引;如果元素不存在,返回-1.

  • boolean offer(E E):将指定元素添加为列表的最后一个元素。

  • E pop():从列表表示的堆栈中弹出元素。

  • voidpush(E E):将元素推送到由列表表示的堆栈上。

  • E remove():用于检索和删除列表的第一个元素。

  • E remove(int index):删除列表中指定位置的元素。

  • int size(): 返回列表中元素的个数。

有关所有方法的文档,可以访问Oracle官方文档页。

使用add()向LinkedList添加元素

语法: boolean add(E e)

import java.io.*; 
import java.util.LinkedList; 

public class LinkedListExample { 
 public static void main(String args[]) { 

    LinkedList animals = new LinkedList(); 

    animals.add("Elephant"); 
    animals.add("Tiger"); 

    System.out.println("The list is:" + animals); 
    list.add("Lion"); 

    //printing the new list 
    System.out.println("The new List is:" + animals); 
 } 
}

输出

The list is:[Elephant, Tiger]
The new List is:[Elephant, Tiger, Lion]

使用push()将元素推送到LinkedList

语法: LinkedListObject.push(E e)

import java.util.LinkedList; 

public class PushExample { 
  //Main method 
  public static void main(String[] args) 
  { 
      LinkedList<String> animals = new LinkedList<>(); 

      animals.push("Elephant"); 

      animals.push("Tiger"); 

      animals.push("Lion"); 

      //Printing the complete stack. 
      System.out.println(animals); 
  } 
}

输出

[Lion, Tiger, Elephant]

使用pop()从LinkedList弹出元素

语法:LinkedListObject.pop()

import java.io.*; 
import java.util.LinkedList; 

public class LinkedListExample { 
 public static void main(String args[]) { 

    LinkedList animals = new LinkedList(); 

   /Pushing an element in the stack 
    animals.push("Elephant"); 

    //Pushing an element in the stack 
    animals.push("Tiger"); 

    //Pop an element from stack 
    String s = animals.pop(); 

    System.out.println(s);

    //Pushing an element in the stack 
    animals.push("Lion"); 

    //Printing the complete stack. 
    System.out.println(animals); 
 } 
}

输出

Elephant
[Elephant, Lion]

使用DeLinkedList移除元素

语法:LinkedList.remove()

import java.io.*; 
import java.util.LinkedList; 

public class LinkedListExample { 
  public static void main(String args[]) 
  { 
      LinkedList<String> animals = new LinkedList<String>(); 

      animals.add("Elephant"); 
      animals.add("Tiger"); 
      animals.add("Lion"); 

      System.out.println("LinkedList:" + animals); 

      //Remove the head using remove() 
      animals.remove(); 

      //Print the final list 
      System.out.println("Final LinkedList:" + animals); 
  } 
}

输出

LinkedList:[Elephant, Tiger, Lion]
Final LinkedList:[Tiger, Lion]

使用clear()清除链表

import java.io.*; 
import java.util.LinkedList; 

public class LinkedListExample { 
  public static void main(String args[]) 
  { 
      LinkedList<String> animals = new LinkedList<String>(); 

      animals.add("Elephant"); 
      animals.add("Tiger"); 
      animals.add("Lion"); 

      System.out.println("Before clear:" + animals); 

      animals.clear(); 

      System.out.println("After clear: " + animals); 

      //Adding elements after clearing the list 
      animals.add("Elephant"); 
      animals.add("Tiger"); 
      animals.add("Lion"); 

      System.out.println("After adding elements to empty list:" + animals); 
  } 
}

输出

Before clear:[Elephant, Tiger, Lion]
After clear: []
After adding elements to empty list:[Elephant, Tiger, Lion]

使用contains()检查LinkedList中是否存在元素

语法:LinkedList.contains(Object element)

import java.io.*; 
import java.util.LinkedList; 

public class LinkedListExample { 
 public static void main(String args[]) { 
    LinkedList<String> animals = new LinkedList<String>(); 

    animals.add("Elephant"); 
    animals.add("Tiger"); 
    animals.add("Lion"); 

    System.out.println("\nIs 'Lion' in the linkedlist: " 
                                    + animals.contains("Lion")); 

    System.out.println("Is'Cat' in the linkedlist: " 
                                       + animals.contains("Cat")); 
 } 
}

**输出

**

Is 'Lion' in the linkedlist: true
Is 'Cat' in the linkedlist: false

使用size()获取LinkedList的大小

语法:LinkedList.size()

import java.io.*; 
import java.util.LinkedList; 

public class LinkedListExample { 
  public static void main(String args[]) 
  { 
      LinkedList<String> animals = new LinkedList<String>(); 

      animals.add("Elephant"); 
      animals.add("Tiger"); 
      animals.add("Lion"); 

      System.out.println("The size of the linked list is: " 
                                              + animals.size()); 
  } 
}

输出

The size of the linked list is: 3

如何循环链表

有5种方法:

For循环

增强型For循环

While循环

迭代器

集合的stream()util(Java 8)

For循环

LinkedList<String> linkedList = new LinkedList<>();
for (int i = 0; i < linkedList.size(); i++) {
  System.out.println(linkedList.get(i));
}

增强型for-loop

for (String temp : linkedList) {
  System.out.println(temp);
}

While循环

int i = 0;
while (i < linkedList.size()) {
  System.out.println(linkedList.get(i));
  i++;
}

迭代器

Iterator<String> iterator = linkedList.iterator();
while (iterator.hasNext()) {
  System.out.println(iterator.next()); 
}

collection stream()util(Java 8)

linkedList.forEach((temp) -> {
  System.out.println(temp);
});