2009-06-22 20 views
9

Un paio di domande riguardanti WeakReference di Java e Collezioni:trovare oggetti di riferimento deboli in collezioni in java

  1. c'è una biblioteca là fuori che implementa diverse interfacce dati-set di Java (ad es Collection, List, Set, Coda, ecc.) Con WeakReference in modo trasparente? Come WeakHashMap è per l'interfaccia HashMap?

  2. Oppure è la soluzione comune per creare semplicemente raccolte normali e quindi utilizzare una sorta di trucco con compareTo o un comparatore o qualcosa per rendere correttamente la ricerca della raccolta?

Io fondamentalmente vorrei questo:

public interface WeakCollection<E> extends Collection<E> {} 

Ma il contratto per l'interfaccia è che i riferimenti a E sono memorizzati debolmente. Ovviamente non ho un problema con get(int index) restituendo null quando quell'oggetto è andato via ecc., Ma vorrei che la funzione contains(E e) e altri elementi piaccia funzionare correttamente.

Sto solo cercando di evitare la trappola "non inventato qui" e assicurandomi che se lo realizzo io stesso è la soluzione più semplice possibile.

+0

Google Collections forse? Il loro Map Builder è abbastanza buono, lo so – akarnokd

+0

Un trucco elegante (solo a volte applicabile) consiste nell'includere un WeakReference canonico nell'oggetto referente stesso - solo bisogno di creare mai un riferimento per target ed equivale a/== lavoro. –

risposta

6

JBoss ha un WeakSet. In Java 6, you can also do

Set<T> s = Collections.newSetFromMap(new WeakHashMap<T, Boolean>()); 

Inoltre ho trovato un WeakArrayList che è LGPL se questo aiuta.

+1

Oh bene quel trucco con Collections è bello, decisamente utile. – Petriborg