Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Java: Does it make sense to create LinkedList and convert it to an ArrayList for sorting?

The title says it all. I have to add several thousand objects to a List and then sort them. For now I thought (since adding something to a LinkedList is considerably faster) I'd use a LinkedList for creation and then make a new ArrayList like so:

LinkedList<Foo> createList = new LinkedList<Foo>();
// add stuff
ArrayList<Foo> returnList = new ArrayList<Foo>(createList);
Collections.sort(returnList);
return returnList;

My question is: Is this method really faster or even slower than just adding the objects directly to an ArrayList? Or, I know the rough number of objects to add. Is an ArrayList with initial capacity faster?

like image 679
Florian Becker Avatar asked Oct 20 '25 09:10

Florian Becker


1 Answers

This is related to two questions:
1. What's the difference between ArrayList and LinkedList, which one is faster for insertion?
2. Which one is faster in sorting?

For question 1, the essential difference between ArrayList and LinkedList is the data structure. ArrayList uses an array inside and good at random access(O(1)). On the other hand, LinkedList in good at delete and insert items(O(1). You can find more here
Back to the question, because we don't need to insert by index here. So ArrayList and LinkedList both O(1) operation. But LinkedList will cause more memory because of the data structure, and ArrayList will cause more time if it needs to scale capacity(set a large enough initial capacity will help speed up the insertion).

For question 2, you can find the answer here ArrayList is better for sorting.

In conclusion, I think you should stick with ArrayList, no need to import LinkedList here.

like image 91
PatrickChen Avatar answered Oct 22 '25 06:10

PatrickChen



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!