Java ArrayList 和 LinkedList 对比

Java ArrayList 和 LinkedList 对比

数组是存储在连续的内存位置的项目的集合。其原理是将同一类型的多个项目存储在一起。然而,数组的局限性在于,数组的大小是预定义的、固定的。有多种方法来解决这个问题。在这篇文章中,我们将讨论为解决这个问题而实现的两个类,即 ArrayListLinkedList 之间的区别。

Java中的ArrayList vs LinkedList

ArrayList是 集合框架 的一部分。它存在于 java.util 包中,为我们提供了Java中的动态数组。虽然,它可能比标准数组慢,但在需要对数组进行大量操作的程序中是有帮助的。我们可以动态地添加和删除项目。它可以自动调整自己的大小。下面是一个例子来演示ArrayList的实现。

例子

// Java program to Illustrate Working of an ArrayList
 
// Importing required classes
import java.io.*;
import java.util.*;
 
// Main class
class GFG {
 
    // Main driver method
    public static void main(String[] args)
    {
        // Creating an ArrayList of Integer type
        ArrayList<Integer> arrli
            = new ArrayList<Integer>();
 
        // Appending the new elements
        // at the end of the list
        // using add () method via for loops
        for (int i = 1; i <= 5; i++)
            arrli.add(i);
 
        // Printing the ArrayList
        System.out.println(arrli);
 
        // Removing an element at index 3
        // from the ArrayList
        // using remove() method
        arrli.remove(3);
 
        // Printing the ArrayList after
        // removing the element
        System.out.println(arrli);
    }
}

输出

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

LinkedList是一个线性的数据结构,其中的元素不是存储在连续的位置,每个元素都是一个独立的对象,有数据部分和地址部分。这些元素使用指针和地址进行链接。每个元素被称为一个节点。由于其动态性和易于插入和删除,它们比数组更受欢迎。下面是一个例子来演示LinkedList的实现。

注意: 该类实现了 LinkedList数据结构

例子

// Java program to Demonstrate Working of a LinkedList
 
// Importing required classes
import java.util.*;
 
// Main class
class GFG {
 
    // main driver method
    public static void main(String args[])
    {
 
        // Creating an object of the
        // class linked list
        LinkedList<String> object
            = new LinkedList<String>();
 
        // Adding the elements to the object created
        // using add() and addLast() method
 
        // Custom input elements
        object.add("A");
        object.add("B");
        object.addLast("C");
 
        // Print the current LinkedList
        System.out.println(object);
 
        // Removing elements from the List object
        // using remove() and removeFirst() method
        object.remove("B");
        object.removeFirst();
 
        System.out.println("Linked list after "
                           + "deletion: " + object);
    }
}

输出

[A, B, C]
Linked list after deletion: [C]

在充分了解了这两者之后,让我们来讨论一下Java中ArrayList和LinkedList的区别。

编号 ArrayList LinkedList
1. 该类使用一个动态数组来存储其中的元素。随着泛型的引入,该类支持对所有类型的对象进行存储。 该类使用一个双链表来存储其中的元素。与ArrayList类似,该类也支持对所有类型的对象进行存储。
2. 2.由于内部实现的原因,操作ArrayList需要更多的时间。每当我们删除一个元素时,在内部,数组会被遍历,内存位会被移位。 与ArrayList相比,操作LinkedList需要更少的时间,因为在一个双重链接的列表中,不存在移动内存位的概念。列表被遍历,引用链接被改变。
3. 低效的内存利用。 良好的内存利用率。
4. 它可以是一维、二维或多维的。 它可以是单一的、双重的或循环的LinkedList。
5. 插入操作很慢。 插入操作是快速的。
6. 该类实现了一个List接口。因此,这就像一个列表。 这个类同时实现了List接口和Deque接口。因此,它可以作为一个列表和一个deque来使用。
7. 当应用程序需要存储数据和访问数据时,这个类的效果更好。 当应用程序需要对存储的数据进行操作时,这个类的工作效果更好。
8. 8.数据访问和存储是非常有效的,因为它根据索引来存储元素。 在LinkedList中,数据访问和存储很慢。
9. 9.删除操作不是很有效。 删除操作是非常有效的。
10. 10.它只用于存储相似类型的数据。 它用于存储任何类型的数据。
11. 使用的内存较少。 使用更多的内存。
12. 内存只在编译时分配。 内存是在运行时分配的。
13. 这被称为静态内存分配。 这就是所谓的动态内存分配。

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程