Speed Comparison of: (1) Java's built-in HashMap, (2) Trove's TIntIntHashMap, and (3) Colt's OpenIntIntHashMap
Finally get to do a comparison among several popular Java HashMap implementations:
- Java's built-in HashMap
- Trove's implementation for primitive types
- Colt's implementation for primitive types
import java.util.HashMap; import cern.colt.map.OpenIntIntHashMap; import cern.colt.map.OpenIntObjectHashMap; import gnu.trove.TIntIntHashMap; import gnu.trove.TIntObjectHashMap; public class Compare { public static void main(String args[]){ System.out.println("1st line: time used(s)\n2nd line: heap memory used so far(MB)"); int n = 10000000; long startTime = System.nanoTime(); long startHeapSize = Runtime.getRuntime().freeMemory(); // BEGIN: benchmark for Java's built-in hashmap System.out.println("\n===== Java's built-in HashMap====="); HashMap jIntIntMap = new HashMap (); System.out.println("\n-- " + n + " puts(key, value) --"); startTime = System.nanoTime(); for (int i = 0; i < n; i++) { jIntIntMap.put(i,new float[]{0f,1f,2f,3f,4f}); } System.out.println( (System.nanoTime() - startTime) / 1000000000.0 ); System.out.println( (startHeapSize - Runtime.getRuntime().freeMemory()) /1048576.0 ); System.out.println("\n-- " + n + " gets(key) --"); startTime = System.nanoTime(); for (int i = 0; i < n; i++) { jIntIntMap.get(i); } System.out.println( (System.nanoTime() - startTime) / 1000000000.0 ); System.out.println( (startHeapSize - Runtime.getRuntime().freeMemory()) /1048576.0 ); System.out.println("\n-- " + n + " containsKey(key) --"); startTime = System.nanoTime(); for (int i = 0; i < n; i++) { jIntIntMap.containsKey(i); } System.out.println( (System.nanoTime() - startTime) / 1000000000.0 ); System.out.println( (startHeapSize - Runtime.getRuntime().freeMemory()) /1048576.0 ); // END // BEGIN: benchmark for Trove's TIntIntHashMap System.out.println("\n===== Trove's TIntIntHashMap ====="); TIntObjectHashMap tIntIntMap = new TIntObjectHashMap (); System.out.println("\n-- " + n + " puts(key, value) --"); startTime = System.nanoTime(); for (int i = 0; i < n; i++) { tIntIntMap.put(i,new float[]{0f,1f,2f,3f,4f}); } System.out.println( (System.nanoTime() - startTime) / 1000000000.0 ); System.out.println( (startHeapSize - Runtime.getRuntime().freeMemory()) /1048576.0 ); System.out.println("\n-- " + n + " gets(key) --"); startTime = System.nanoTime(); for (int i = 0; i < n; i++) { tIntIntMap.get(i); } System.out.println( (System.nanoTime() - startTime) / 1000000000.0 ); System.out.println( (startHeapSize - Runtime.getRuntime().freeMemory()) /1048576.0 ); System.out.println("\n-- " + n + " containsKey(key) --"); startTime = System.nanoTime(); for (int i = 0; i < n; i++) { tIntIntMap.containsKey(i); } System.out.println( (System.nanoTime() - startTime) / 1000000000.0 ); System.out.println( (startHeapSize - Runtime.getRuntime().freeMemory()) /1048576.0 ); // END // BEGIN: benchmark for Colt's OpenIntIntHashMap System.out.println("\n===== Colt's OpenIntIntHashMap ====="); OpenIntObjectHashMap cIntIntMap = new OpenIntObjectHashMap(); System.out.println("\n-- " + n + " puts(key, value) --"); startTime = System.nanoTime(); for (int i = 0; i < n; i++) { cIntIntMap.put(i,new float[]{0f,1f,2f,3f,4f}); } System.out.println( (System.nanoTime() - startTime) / 1000000000.0 ); System.out.println( (startHeapSize - Runtime.getRuntime().freeMemory()) /1048576.0 ); System.out.println("\n-- " + n + " gets(key) --"); startTime = System.nanoTime(); for (int i = 0; i < n; i++) { cIntIntMap.get(i); } System.out.println( (System.nanoTime() - startTime) / 1000000000.0 ); System.out.println( (startHeapSize - Runtime.getRuntime().freeMemory()) /1048576.0 ); System.out.println("\n-- " + n + " containsKey(key) --"); startTime = System.nanoTime(); for (int i = 0; i < n; i++) { cIntIntMap.containsKey(i); } System.out.println( (System.nanoTime() - startTime) / 1000000000.0 ); System.out.println( (startHeapSize - Runtime.getRuntime().freeMemory()) /1048576.0 ); // END } }