Utils

Algumas classes uteis de jmine.tec.utils

jmine.tec.utils

Tuple

Classes que implementam esta interface servem para guardar um par de valores. Ha apenas duas implementacoes desta interface:

  • MutableTuple: contem metodos que modificam os membros da tupla
  • UnmodifiableTuple: tupla nao modificavel - mais indicado para multi-threading

jmine.tec.utils.collection

MultiMap

Classes que implementam esta interface atuam como o java.util.Map, porem mapeam uma chave para multiplos valores. Ha duas implementacoes desta classe, a saber:

SetMultiMap

Implementacao de MultiMap que usa Set’s para guardar os valores, nao permitindo repeticoes. Embora a ordem de iteracao dos valores nao seja garantida, esta implementacao usa LinkedHashSet, armazenando a ordem de insercao dos valores mapeados para uma mesma chave.

ListMultiMap

Implementacao de MultiMap que usa List’s para guardar os valores, permitindo valores duplicados para uma mesma chave.

ClassHierarchyMap

Implementacao de java.util.Map cujas chaves sao sempre instancias de Class e que respeita a hierarquia de classes no lookup. Em outras palavras, se um valor esta mapeado para uma determinada classe, ela pode ser recuperada passando um objeto Class que representa uma subclasse.

por exemplo:

map = new ClassHierarchyMap<String>();
map.put(Object.class, "Object");
assertEquals("Object", map.get(String.class)); //String eh uma subclasse de Object

o mesmo vale para interfaces:

map = new ClassHierarchyMap<String>();
map.put(java.io.Serializable.class, "Serializable");
assertEquals("Serializable", map.get(String.class)); //String implementa Serializable

SmallSet

Implementacao de Set para situacoes em que se sabe de antemao que o Set nao vai conter muitos elementos. Difere de java.util.HashSet por resolver colisoes por linear probing ao inves de listas ligadas (como eh o caso de java.util.HashSet). Alem disso, usa menos do que a metade da memoria de java.util.HashSet por nao precisar usar um java.util.Map como storage. Por último, iterar sobre seus elementos eh mais eficiente do que java.util.HashSet. Porém, esta classe possui uma certa limitacao de tamanho (algo proximo de loadFactor * Integer.MAX_VALUE) e nao usa numeros primos para o tamanho do storage - aumentando a probabilidade de colisoes. Por causa de suas limitacoes, eh mais indicado para cenarios em que o conjunto nele contido nao tenha muitos elementos.

CopyOnWriteHashMap

Implementacao de Map para ser usado por multiplas threads. Diferencia-se de java.util.concurrent.ConcurrentHashMap por fazer uma copia do Map para todas as operacoes que o modificam - desse modo, todas as operacoes de escrita tem complexidade O(N), onde N eh o tamanho do Map. Indicado para ser usado quando:

  • sabe-se de antemao que haverao poucas operacoes de escrita (put, remove, clear, etc)
  • serao necessarias operacoes que precisem olhar o Map inteiro (ex: size, values(), keySet(), entrySet(), etc)

jmine.tec.utils.debug

TODO DebugRuntime