package org.itsnat.droid.impl.util;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
/**
* El motivo de esta clase es evitar un Map cuando tenemos la previsión de que habrá apenas dos o tres elementos de clave,
* un LinkedList o un ArrayList, es mucho más ligero, ahora bien NO MÁS RÁPIDO
* Tiene mucho mejor rendimiento un ArrayList al recorrerlo por índice (método get(Key)) que un LinkedList en donde hay que crear un Iterator
* http://grepcode.com/file/repository.grepcode.com/java/root/jdk/openjdk/6-b14/java/util/HashMap.java
*
* Created by jmarranz on 4/07/14.
*/
public class MapLight<Key,Value>
{
protected ArrayList<Map.Entry<Key,Value>> list;
public MapLight()
{
this(5);
}
public MapLight(int initialCap)
{
this.list = new ArrayList<Map.Entry<Key,Value>>(initialCap);
}
public Iterator<Map.Entry<Key,Value>> iterator()
{
return list.iterator();
}
public Value get(Key key)
{
int size = list.size();
for(int i = 0; i < size; i++)
{
Map.Entry<Key, Value> entry = list.get(i);
if (entry.getKey().equals(key)) return entry.getValue();
}
return null;
}
public Value remove(Key key)
{
for(Iterator<Map.Entry<Key,Value>> it = list.iterator(); it.hasNext(); )
{
Map.Entry<Key,Value> entry = it.next();
if (entry.getKey().equals(key))
{
it.remove();
return entry.getValue();
}
}
return null;
}
public Value put(Key key,Value value)
{
int size = list.size();
for(int i = 0; i < size; i++)
{
Map.Entry<Key, Value> entry = list.get(i);
if (entry.getKey().equals(key))
{
Value old = entry.getValue();
entry.setValue(value);
return old;
}
}
// Es nueva la key
MapEntryImpl<Key,Value> entry = new MapEntryImpl<Key,Value>(key,value);
list.add(entry);
return null;
}
public List<Map.Entry<Key,Value>> getEntryList()
{
return list;
}
}