Un vecteur à référencement faible
Le 9 mars 2008 à 20:26.

Cette classe permet de gêrer une liste d'objets dans un conteneur fonctionnant comme un vecteur. Le point intéressant est que les références aux objets insérés sont de type faible, c'est à dire qu'elle ne gagne jamais face au GarbageCollector si la seule Référence à un objet est un WeakReferenceVector. Cette classe est surtout utilisée pour implémenter des observers de sorte à ce l'on ai pas à gêrer le dé-référencement des listeners pour que les objets en écoute soit libérés.

public class WeakReferenceVector<E> implements Iterable<E> {
    private LinkedList<WeakReference<E>> storage = new LinkedList<WeakReference<E>>();

    public WeakReferenceVector() {
    }

    public boolean isEmpty() {
        pack();
        return storage.isEmpty();
    }

    public boolean add(E value) {
        pack();
        return storage.add(new WeakReference<E>(value));
    }

    public void clear() {
        storage.clear();
    }

    public boolean contains(Object value) {
        pack();
        return storage.contains(value);
    }

    public E elementAt(int index) {
        pack();
        return storage.get(index).get();
    }

    public boolean removeElement(E value) {
        pack();
        return storage.remove(value);
    }

    public int size() {
        pack();
        return storage.size();
    }

    private synchronized void pack() {
        for (WeakReference<E> weakReference : storage)
            if (weakReference.get() == null)
                storage.remove(weakReference);
    }

    public Iterator<E> iterator() {
        return new Iterator() {
            int index;

            public boolean hasNext() {
                return index < storage.size();
            }

            public E next() {
                return storage.get(index++).get();
            }

            public void remove() {
                storage.remove(index);
            }
        };
    }
}

Commentaires

Poster un nouveau commentaire

Le contenu de ce champ est gardé secret et ne sera pas montré publiquement.
  • Allowed HTML tags: <a> <em> <strong> <cite> <code> <ul> <ol> <li> <dl> <dt> <dd>
  • To highlight piece of code, just surround them with <code type="language"> Your code &tl;/code>>. Language can be java,c++,bash,etc... Everything Geshi support.
  • Les lignes et les paragraphes vont à la ligne automatiquement.
  • Textual smileys will be replaced with graphical ones.
  • Les adresses de pages web et de messagerie électronique sont transformées en liens automatiquement.

Plus d'informations sur les options de formatage

Connexion utilisateur
Les derniers bavardages...