/******************************************************************************* | |
* Copyright (c) 1998, 2013 Oracle and/or its affiliates. All rights reserved. | |
* This program and the accompanying materials are made available under the | |
* terms of the Eclipse Public License v1.0 and Eclipse Distribution License v. 1.0 | |
* which accompanies this distribution. | |
* The Eclipse Public License is available at http://www.eclipse.org/legal/epl-v10.html | |
* and the Eclipse Distribution License is available at | |
* http://www.eclipse.org/org/documents/edl-v10.php. | |
* | |
* Contributors: | |
* Oracle - initial API and implementation from Oracle TopLink | |
******************************************************************************/ | |
package org.eclipse.persistence.testing.tests.performance.java; | |
import java.util.*; | |
import java.util.concurrent.ConcurrentHashMap; | |
import org.eclipse.persistence.testing.framework.*; | |
/** | |
* This test compares the performance between HashMap and Hashtable. | |
*/ | |
public class MapTest extends PerformanceComparisonTestCase { | |
protected Object[] values; | |
protected int size; | |
public MapTest(int size) { | |
this.size = size; | |
setName("Hashtable vs Maps size " + size + " PerformanceComparisonTest"); | |
setDescription("Compares the performance between HashMap and Hashtable."); | |
addHashtable2Test(); | |
addHashMapTest(); | |
addLinkedMapTest(); | |
addIdentityHashMapTest(); | |
addHashSetTest(); | |
addConcurrentHashMapTest(); | |
this.values = new Object[size]; | |
for (int index = 0; index < size; index++) { | |
this.values[index] = new Object(); | |
} | |
} | |
/** | |
* Hashtable. | |
*/ | |
public void test() throws Exception { | |
Hashtable table = new Hashtable(10); | |
for (int index = 0; index < size; index++) { | |
table.put(values[index], values[index]); | |
} | |
for (int index = 0; index < size; index++) { | |
Object result = table.get(values[index]); | |
} | |
for (int index = 0; index < size; index++) { | |
Object result = table.remove(values[index]); | |
} | |
} | |
/** | |
* HashMap. | |
*/ | |
public void addHashMapTest() { | |
PerformanceComparisonTestCase test = new PerformanceComparisonTestCase() { | |
public void test() { | |
Map map = new HashMap(10); | |
for (int index = 0; index < size; index++) { | |
map.put(values[index], values[index]); | |
} | |
for (int index = 0; index < size; index++) { | |
Object result = map.get(values[index]); | |
} | |
for (int index = 0; index < size; index++) { | |
Object result = map.remove(values[index]); | |
} | |
} | |
}; | |
test.setName("HashMapTest"); | |
addTest(test); | |
} | |
/** | |
* HashMap. | |
*/ | |
public void addHashtable2Test() { | |
PerformanceComparisonTestCase test = new PerformanceComparisonTestCase() { | |
public void test() { | |
Map map = new Hashtable(10); | |
for (int index = 0; index < size; index++) { | |
map.put(values[index], values[index]); | |
} | |
for (int index = 0; index < size; index++) { | |
Object result = map.get(values[index]); | |
} | |
for (int index = 0; index < size; index++) { | |
Object result = map.remove(values[index]); | |
} | |
} | |
}; | |
test.setName("Hashtable2Test"); | |
addTest(test); | |
} | |
/** | |
* LinkedMap. | |
*/ | |
public void addLinkedMapTest() { | |
PerformanceComparisonTestCase test = new PerformanceComparisonTestCase() { | |
public void test() { | |
Map map = new LinkedHashMap(10); | |
for (int index = 0; index < size; index++) { | |
map.put(values[index], values[index]); | |
} | |
for (int index = 0; index < size; index++) { | |
Object result = map.get(values[index]); | |
} | |
for (int index = 0; index < size; index++) { | |
Object result = map.remove(values[index]); | |
} | |
} | |
}; | |
test.setName("LinkedMapTest"); | |
test.setAllowableDecrease(-20); | |
addTest(test); | |
} | |
/** | |
* IdentityHashMap. | |
*/ | |
public void addIdentityHashMapTest() { | |
PerformanceComparisonTestCase test = new PerformanceComparisonTestCase() { | |
public void test() { | |
Map map = new IdentityHashMap(10); | |
for (int index = 0; index < size; index++) { | |
map.put(values[index], values[index]); | |
} | |
for (int index = 0; index < size; index++) { | |
Object result = map.get(values[index]); | |
} | |
for (int index = 0; index < size; index++) { | |
Object result = map.remove(values[index]); | |
} | |
} | |
}; | |
test.setName("IdentityHashMapTest"); | |
test.setAllowableDecrease(-60); | |
addTest(test); | |
} | |
/** | |
* ConcurrentHashMap. | |
*/ | |
public void addConcurrentHashMapTest() { | |
PerformanceComparisonTestCase test = new PerformanceComparisonTestCase() { | |
public void test() { | |
Map map = new ConcurrentHashMap(10); | |
for (int index = 0; index < size; index++) { | |
map.put(values[index], values[index]); | |
} | |
for (int index = 0; index < size; index++) { | |
Object result = map.get(values[index]); | |
} | |
for (int index = 0; index < size; index++) { | |
Object result = map.remove(values[index]); | |
} | |
} | |
}; | |
test.setName("ConcurrentHashMapTest"); | |
test.setAllowableDecrease(-5); | |
addTest(test); | |
} | |
/** | |
* HashSet. | |
*/ | |
public void addHashSetTest() { | |
PerformanceComparisonTestCase test = new PerformanceComparisonTestCase() { | |
public void test() { | |
Set map = new HashSet(10); | |
for (int index = 0; index < size; index++) { | |
map.add(values[index]); | |
} | |
for (int index = 0; index < size; index++) { | |
boolean result = map.contains(values[index]); | |
} | |
for (int index = 0; index < size; index++) { | |
boolean result = map.remove(values[index]); | |
} | |
} | |
}; | |
test.setName("HashSetTest"); | |
test.setAllowableDecrease(0); | |
addTest(test); | |
} | |
} |