Java中的LinkedList与ArrayList比较
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相比少|