Java中的LinkedList与ArrayList比较

时间:2020-02-23 14:33:56  来源:igfitidea点击:

Java中的List是集合接口的子接口,它通过位置访问,迭代等概念提供最佳解决方案。
在本文中,我将讨论Java中列表接口LinkedList与ArrayList之间的主要区别。

什么是LinkedList?

在数组之后,第二受欢迎的数据结构肯定是链接列表。
链表是一种线性数据结构,由一个节点链组成,其中每个节点都包含一个值和一个指向链中下一个节点的指针。
同样,链接列表中的最后一个链接指向null,表示链的末尾。
链表中的元素称为节点。
列表中的第一个节点称为head。
最后一个节点称为tail。

让我给你一个简单的例子:想象一下一个链接在一起的回形针链。
我们可以轻松地在顶部或者底部添加另一个回形针。
在中间插入一个也很容易。
我们所要做的就是断开中间的链条,添加一个新的回形针,然后重新连接另一半。
链接列表与此类似。

例子:

package MyPackage;
import java.util.LinkedList;
import java.util.ListIterator;
public class linkedlist {
public static void main(String args[]) {
/* Linked List Declaration */
LinkedList<String>l_list = new LinkedList<String>();
/*add(String Item) is used for adding
* the Items to the linked list*/
l_list.add("Java");
l_list.add("Python");
l_list.add("Scala");
l_list.add("Swift");
System.out.println("Linked List Content: " +l_list);
/*Add Items at specified position*/
l_list.add(2, "JavaScript");
l_list.add(3, "Kotlin");
System.out.println("l_list Content after editing: " +l_list);
/*Add First and Last Item*/
l_list.addFirst("First Course");
l_list.addLast("Last Course");
System.out.println("l_list Content after addition: " +l_list);
/*Get and set Items in the list*/
Object firstvar = l_list.get(0);
System.out.println("First Item: " +firstvar);
l_list.set(0, "Java9");
System.out.println("l_list Content after updating first Item: " +l_list);
/* Remove from a position*/
l_list.remove(1);
l_list.remove(2);
System.out.println("LinkedList after deletion of Item in 2nd and 3rd position " +l_list);
/*Remove first and last Item*/
l_list.removeFirst();
l_list.removeLast();
System.out.println("Final Content after removing first and last Item: "+l_list);
/*Iterating the linked list*/
ListIterator<String>itrator = l_list.listIterator();
System.out.println("List displayed using iterator:");
while (itrator.hasNext())
{
System.out.println(itrator.next());
}
}
}
Linked List Content = { Java, Python, Scala, Swift}
Content after editing ={ Java, Python, JavaScript, Kotlin, Scala, Swift }
Content after addition = { First Course, Java, Python, JavaScript, Kotlin, Scala, Swift, Last Course }
First Item = { First Course }
Content after updating first item = { Java9, Java, Python, JavaScript, Kotlin, Scala, Swift, Last Course }
Content after deletion of item in 2nd and 3rd position = { Java9, Python, Kotlin, Scala, Swift, Last Course }
Final Content after removing first and last Item = { Python, Kotlin, Scala, Swift }
List displayed using iterator =
Python
Kotlin
Scala
Swift

现在,让我们继续下一个主题。

什么是ArrayList?

Java中的ArrayList是List接口的实现,可以其中动态添加元素或者从相应列表中删除元素。
在此,如果添加的元素多于初始或者实际大小,则列表的大小会动态增加。
尽管它可能比标准数组慢,但在需要大量操作数组的程序中可能会有所帮助。

ArrayList用于以下目的:

  • Java中的ArrayList用于"存储"动态大小的元素集合。

  • 它由大小初始化。但是,如果集合增大,则大小会增大;如果从集合中删除对象,则大小会减小。

  • 另外,ArrayList允许我们随机访问列表。

让我们继续前进,指出Java中LinkedList和ArrayList之间的相似之处。

LinkedList和ArrayList之间的相似之处

这些是Java中LinkedList和ArrayList之间的显着相似之处。

  • ArrayList和LinkedList是List接口的实现。

  • ArrayList和LinkedList都维护元素的插入顺序。这意味着,在显示List元素时,结果集将具有与将元素插入List的顺序相同的顺序。

  • 这些ArrayList和LinkedList类是不同步的,可以使用CollectionsSynchronizedList方法显式进行同步。

  • 这些类返回的迭代器和ListIterator是快速失败的。这意味着,如果在创建迭代器之后的任何给定时间对列表进行结构修改,除了迭代器自己的remove或者add方法之外,迭代器都会抛出ConcurrentModificationException。

LinkedList和ArrayList之间的区别

首先,让我们看一下比较Java中LinkedList与ArrayList的参数。

在Java中用于比较LinkedList和ArrayList的参数:

  • 操作
  • 实现
  • 处理
  • 内存

1.操作

在LinkedList中,项目的插入,添加和删除操作更快,因为我们不需要像在ArrayList中那样调整大小。

2.实现

ArrayList基于动态可调整大小的数组的概念,而LinkedList基于双链表实现

3.处理

LinkedList类可以用作列表和队列,因为它实现了List和Deque接口,而ArrayList仅可以实现列表。

4.内存

LinkedList比ArrayList消耗更多的内存,因为LinkedList中的每个节点都存储两个引用,而ArrayList仅保存数据及其索引

Java中的LinkedList与ArrayList的比较

||||
| --- - | --- | - - |
|参数| linkedlist | ArrayList |
|操作| 插入,加法和删除操作相当较快 | 相对操作在这里慢于 |
|实现| 遵循双链接列表实现 | 遵循动态可调整大小的阵列 |
|处理| linkedlist类可以是列表和队列,因为它实现了列表和deque接口 arraylist类可以是列表,因为它仅实现列表|
|内存| linkedlist中的内存消耗很高 | 与linkedlist相比少|