Skip to main content

ArrayList vs LinkedList vs HashSet Performance Comparision



Conclusions

Inserting & Reading sequentially from Collection prefer LinkedList/ArrayList

Inserting & Reading/Deleting by Search/equals from Collection prefer HashSet

Inserting, ArrayList & LinkedList performs best while HashSet takes double the time

Reading, HashSet performs best while ArrayList & LinkedList are marginally less

Deleting, HashSet performs 10 times better than ArrayList & ArrayList performs 4 times better than LinkedList. LinkedList is slow because of sequencial search

Bottom line : unless you are not going to iterate using for(Integer i : list ) then prefer HashSet


Inserting/Reading/Deleting integer's from zero till count

JDK7Collectionactioncounttime ms
ArrayListInsert1000/1
LinkedListInsert1000/1
HashSetInsert1000/1
ArrayListInsert100005
LinkedListInsert100004
HashSetInsert100007
ArrayListInsert10000011
LinkedListInsert10000011
HashSetInsert10000021
ArrayListGet/Read1000
LinkedListGet/Read1000
HashSetGet/Read1000
ArrayListGet/Read100004
LinkedListGet/Read100003
HashSetGet/Read100004
ArrayListGet/Read10000010
LinkedListGet/Read10000010
HashSetGet/Read1000009

JDK6Collectionactioncounttime ms
ArrayListInsert1000/1
LinkedListInsert1000/1
HashSetInsert1000/1
ArrayListInsert100005
LinkedListInsert100004
HashSetInsert100007
ArrayListInsert10000012
LinkedListInsert10000011
HashSetInsert10000017
ArrayListGet/Read1000
LinkedListGet/Read1000
HashSetGet/Read1000
ArrayListGet/Read100005
LinkedListGet/Read100003
HashSetGet/Read100004
ArrayListGet/Read10000010
LinkedListGet/Read10000010
HashSetGet/Read1000009

JDK6Collectionactioncounttime ms
ArrayListinsert & remove 25%100000336
LinkedListGet/Read1000001188
HashSetGet/Read10000025

JDK7Collectionactioncounttime ms
ArrayListinsert & remove 25%100000337
LinkedListGet/Read1000001208
HashSetGet/Read10000032

Environment

MacBook Pro

Processor 2.3 GHz Intel Core i7

Memory 16 GB 1600 MHz DDR3

Software OS X 10.8 (12A269)

Comments

Popular posts from this blog

JPA 2 new feature @ElementCollection explained

@ElementCollection is new annotation introduced in JPA 2.0, This will help us get rid of One-Many and Many-One shitty syntax. Example 1: Stores list of Strings in an Entity @Entity public class Users implements Serializable {     private static final long serialVersionUID = 1L;     @Id     @GeneratedValue(strategy = GenerationType.AUTO)     private Long id;     @ElementCollection     private List<String> certifications = new ArrayList <String> ();     public Long getId() {         return id;     }     public void setId(Long id) {         this.id = id;     }     public List <String> getCertifications() {         return certifications;     }     pub...

Access multiple Databases in JPA

According to JPA specification we can define multiple "persistence-unit" elements (i.e. like below) in persistence.xml file and can easily refer them inside Dao layers as this. public class PolarDaoImpl {     @PersistenceContext(unitName="PolarPU")     protected EntityManager entityManager; -- } public class BearDaoImpl {     @PersistenceContext(unitName="BearPU")     protected EntityManager entityManager; -- } Checkout sample persistence.xml <?xml version="1.0" encoding="UTF-8"?> <persistence version="2.0" xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd">     <!-- Database 1 -->     <persistence-unit name="PolarPU" transaction-type="RESOURCE_LOCAL">        ...

Validating CSV Files

What is CsvValidator ?   A Java framework which validates any CSV files something similar to XML validation using XSD. Why should I use this ?   You don't have to use this and in fact its easy to write something your own and also checkout its source code for reference. Why did I write this ?   Some of our projects integrate with third party application which exchanges information in CSV files so I thought of writing a generic validator which can be hooked in multiple projects or can be used by QA for integration testing. What is the license clause ?   GNU GPL v2 Are there any JUnit test cases for me checkout ?  Yes,  source How to integrate in my existing project ? Just add the Jar which can be downloaded from here  CsvValidator.jar  and you are good. Instantiate  CsvValidator c onstructor which takes these 3 arguements          // filename is the the file to be validated and here ...