Skip to content

Instantly share code, notes, and snippets.

@FedericoPonzi
Last active March 10, 2018 11:22
Show Gist options
  • Save FedericoPonzi/946349da24d370fcb5945945842cce86 to your computer and use it in GitHub Desktop.
Save FedericoPonzi/946349da24d370fcb5945945842cce86 to your computer and use it in GitHub Desktop.
import java.util.ArrayList;
import java.util.LinkedList;
import java.util.Random;
/**
* Created by Federico Ponzi on 19/02/17.
* https://www.linkedin.com/pulse/performance-array-vs-linked-list-modern-computers-dat-hoang-tien
*/
public class Benchmark
{
private int size;
ArrayList<Integer> arrayList;
LinkedList<Integer> linkedList;
long start;
long arrayTime;
long dequeTime;
Random random;
int r;
public Benchmark(int size){
this.size = size;
random = new Random();
arrayList = new ArrayList<>();
linkedList = new LinkedList<>();
}
public void doInitStructures(){
r = random.nextInt(10);
start = System.currentTimeMillis();
for (int i = 0; i < size; i++)
{
arrayList.add(i+r);
}
arrayTime = System.currentTimeMillis()-start;
start = System.currentTimeMillis();
for (int i = 0; i < size; i++)
{
linkedList.add(i+r);
}
dequeTime = System.currentTimeMillis()-start;
System.out.println("Creation( " + size + "): ArrayList time: " + arrayTime + "ms vs LinkedList time:" + dequeTime + "ms");
arrayList = new ArrayList<>();
linkedList = new LinkedList<>();
}
/**
* Add size elements in first position.
*/
public void doAddFirst(){
r = random.nextInt(10);
start = System.currentTimeMillis();
for (int i = 0; i < size; i++)
{
arrayList.add(0, i+r);
}
arrayTime = System.currentTimeMillis()-start;
start = System.currentTimeMillis();
for (int i = 0; i < size; i++)
{
linkedList.addFirst(i+r);
}
dequeTime = System.currentTimeMillis() - start;
System.out.println("AddFirst( " + size + "): ArrayList: " + arrayTime + "ms vs LinkedList:" + dequeTime + "ms");
arrayList = new ArrayList<>();
linkedList = new LinkedList<>();
}
public void doRandomInsert(){
r = random.nextInt(10);
start = System.currentTimeMillis();
arrayList.add(r);
arrayList.add(r);
for (int i = 0; i < size; i++)
{
arrayList.add(random.nextInt(arrayList.size()-1),i+r);
}
arrayTime = System.currentTimeMillis()-start;
start = System.currentTimeMillis();
linkedList.add(r);
linkedList.add(r);
for (int i = 0; i < size; i++)
{
linkedList.add(random.nextInt(linkedList.size() -1), i + r);
}
dequeTime = System.currentTimeMillis() - start;
System.out.println("RandomInsert( " + size + "): ArrayList: " + arrayTime + "ms vs LinkedList:" + dequeTime + "ms");
//arrayList = new ArrayList<>();
//linkedList = new LinkedList<>();
}
public void doRandomRemove()
{
r = random.nextInt(10);
for (int i = 0; i < size; i++){
r = random.nextInt(10);
arrayList.add(r);
linkedList.add(r);
}
start = System.currentTimeMillis();
arrayList.add(r);
arrayList.add(r);
for (int i = 0; i < size; i++)
{
arrayList.remove(random.nextInt(arrayList.size()-1));
}
arrayTime = System.currentTimeMillis()-start;
start = System.currentTimeMillis();
linkedList.add(r);
linkedList.add(r);
for (int i = 0; i < size; i++)
{
linkedList.remove(random.nextInt(linkedList.size() -1));
}
dequeTime = System.currentTimeMillis() - start;
System.out.println("RandomRemove( " + size + "): ArrayList: " + arrayTime + "ms vs LinkedList:" + dequeTime + "ms");
arrayList = new ArrayList<>();
linkedList = new LinkedList<>();
}
public static void main(String[] args) throws InterruptedException
{
ArrayList<Benchmark> benchmarks = new ArrayList<>();
for(int i = 3; i < 6; i++)
{
benchmarks.add(new Benchmark((int) Math.pow(10, i) ));
}
for(Benchmark b : benchmarks)
{
b.doInitStructures();
}
for(Benchmark b : benchmarks)
{
b.doAddFirst();
}
for(Benchmark b : benchmarks)
{
b.doRandomInsert();
}
for(Benchmark b : benchmarks)
{
b.doRandomRemove();
}
}
}
@FedericoPonzi
Copy link
Author

This is an example run on my laptop:

Creation( 1000): ArrayList time: 1ms vs LinkedList time:0ms
Creation( 10000): ArrayList time: 2ms vs LinkedList time:1ms
Creation( 100000): ArrayList time: 9ms vs LinkedList time:5ms

AddFirst( 1000): ArrayList: 0ms vs LinkedList:1ms
AddFirst( 10000): ArrayList: 9ms vs LinkedList:1ms
AddFirst( 100000): ArrayList: 1032ms vs LinkedList:7ms

RandomInsert( 1000): ArrayList: 1ms vs LinkedList:2ms
RandomInsert( 10000): ArrayList: 6ms vs LinkedList:63ms
RandomInsert( 100000): ArrayList: 376ms vs LinkedList:14240ms

RandomRemove( 1000): ArrayList: 0ms vs LinkedList:1ms
RandomRemove( 10000): ArrayList: 11ms vs LinkedList:321ms
RandomRemove( 100000): ArrayList: 1334ms vs LinkedList:92248ms

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment