LinkedList and ArrayList both implement List Interface but how they work internally is
where the differences lies. Main difference
between ArrayList and LinkedList is that ArrayList is implemented using re
sizable array while LinkedList is implemented using doubly LinkedList.
ArrayList is more popular among Java programmer than LinkedList as there are
few scenarios on which LinkedList is a suitable collection than ArrayList.
In this article we will see
some differences between LinkedList and
ArrayList and try to find out when
and where to use LinkedList over ArrayList.
LinkedList vs ArrayList in Java
All the
differences between LinkedList and ArrayList has there root on difference
between Array
and LinkedList data-structure. If you are familiar with Array and
LinkedList data structure you will most likely derive following differences
between them:
1) Since
Array is an index based data-structure searching or getting element from Array with
index is pretty fast. Array provides O(1) performance for get(index) method but
remove is costly in ArrayList as you need to rearrange all elements. On the Other
hand LinkedList doesn't provide Random or index based access and you need to
iterate over linked list to retrieve any element which is of order O(n).
2)
Insertions are easy and fast in LinkedList as compared to ArrayList
because there is no risk of resizing array
and copying
content to new array if array gets full which makes adding into ArrayList of
O(n) in worst case, while adding is O(1) operation in LinkedList in Java.
ArrayList also needs to update its index if you insert something anywhere
except at the end of array.
3) Removal
is like insertions better in LinkedList than ArrayList.
4)
LinkedList has more memory overhead than ArrayList because in ArrayList each
index only holds actual object (data) but in case of LinkedList each node holds
both data and address of next and previous node.
When to use
LinkedList and ArrayList in Java
As I said LinkedList is not as popular as ArrayList
but still there are situation where a LinkedList is better choice than
ArrayList in Java. Use LinkedList in Java if:
1) Your application can live without Random access.
Because if you need nth element in LinkedList you need to first traverse up to
nth element O(n) and than you get data from that node.
2) Your application is more insertion and deletion
driver and you insert or remove more than retrieval. Since insertion or
removal doesn't involve resizing its much faster than
ArrayList.
That’s all on difference
between ArrayList and LinkedList in Java.
Use ArrayList in Java for all there situation where you need a non-synchronized index based access.
ArrayList is fast and easy to use, just try to minimize array resizing by
constructing arraylist with proper initial size.
ArrayList vs. LinkedList vs. Vector
From the hierarchy diagram, they all implement List
interface. They are very similar to use. Their main difference is their
implementation which causes different performance for different
operations. ArrayList is implemented as a resizable array. As more
elements are added to ArrayList, its size is increased dynamically. It's
elements can be accessed directly by using the get and set methods, since
ArrayList is essentially an array. LinkedList is implemented as a double linked
list.
Its performance on add and remove is better
than Arraylist, but worse on get and set methods. Vector is similar with
ArrayList, but it is synchronized. ArrayList is a better choice if your program
is thread-safe. Vector and ArrayList require space as more elements are added.
Vector each time doubles its array size, while ArrayList grow 50% of its size
each time. LinkedList, however, also implements Queue interface which adds more
methods than ArrayList and Vector, such as offer(), peek(), poll(), etc.
Note: The default initial capacity of an ArrayList is pretty
small. It is a good habit to construct the ArrayList with a higher initial
capacity. This can avoid the resizing cost.
ArrayList and LinkedList both implements List interface and maintains
insertion order. Both are non synchronized classes.But there are many differences between ArrayList and LinkedList classes that are given below.
ArrayList
|
LinkedList
|
1) ArrayList internally uses dynamic array to store the
elements.
|
LinkedList internally uses doubly
linked list to store the elements.
|
2) Manipulation with ArrayList is slow because it internally
uses array. If any element is removed from the array, all the bits are
shifted in memory.
|
Manipulation with LinkedList is faster than ArrayList because
it uses doubly linked list so no bit shifting is required in memory.
|
3) ArrayList class can act
as a list only because it implements List only.
|
LinkedList class can act
as a list and queue both because it implements List and Deque
interfaces.
|
4) ArrayList is better for storing and
accessing data.
|
LinkedList is better for manipulating
data.
|
No comments:
Post a Comment