1.How to get elements from HashMap
public static void printMap(Map mp)
{
Iterator it = mp.entrySet().iterator();
while (it.hasNext())
{
Map.Entry pairs = (Map.Entry)it.next();
System.out.println(pairs.getKey() + " = " + pairs.getValue());
//Avoids a ConcurrentModificationException
it.remove();
}
}
2.Adding keys to HashMap Finding Next Key
To find the next key while using HashMap with Integer as Key the following function can be used.
- Iterate through List of Keys
- Sort the Keys
- Find the Highest value by looking into Key at size-1
- The next key to be used is received by adding 1 to Key(lastMaxElem) at size-1
private Integer getNextKey()
{
List<Integer> keyList = new ArrayList<Integer>();
int lastMaxElem = 0;
HashMap WaterfallHM = (HashMap) getFromWorkFlowScope("WaterfallHM");
Set<Integer> keys = WaterfallHM.keySet();
for ( Integer key : keys) {
keyList.add(key);
}
Collections.sort(keyList); // Sort the arraylist
lastMaxElem = keyList.get(keyList.size() - 1);
lastMaxElem++;
return new Integer(lastMaxElem);
}
3.How to Initialize a Constants in HashMap
public class Test
{
private static final Map<Integer, String> MY_MAP = createMap();
private static Map<Integer, String> createMap() {
Map<Integer, String> result = new HashMap<Integer, String>();
result.put(1, "one");
result.put(2, "two");
return Collections.unmodifiableMap(result);
}
}
4.Why Map Interface doesnot extend Collections Framework
Collection assume elements of one value. Map assumes entries of key/value pairs. They could have been engineered to re-use the same common interface however some methods they implement are incompatible e.g.
Collection.remove(Object) - removes an element.
Map.remove(Object) - removes by key, not by entry.
There are some methods in common; size(), isEmpty(), clear(), putAll/addAll()
Collection interface is largely incompatible with the Map interface. If Map extended Collection, what would the add(Object) method do
5.Why need ConcurrentHashMap and CopyOnWriteArrayList
he synchronized collections classes, Hashtable, and Vector, and the synchronized wrapper classes, Collections.synchronizedMap() and Collections.synchronizedList(), provide a basic conditionally thread-safe implementation of Map and List. However, several factors make them unsuitable for use in highly concurrent applications, for example, their single collection-wide lock is an impediment to scalability and it often becomes necessary to lock a collection for a considerable time during iteration to prevent ConcurrentModificationException.ConcurrentHashMap(uses Segments) and CopyOnWriteArrayList implementations provide much higher concurrency while preserving thread safety, with some minor compromises in their promises to callers.