📄 weakreferences.java
字号:
/* -*- tab-width: 4 -*- * * Electric(tm) VLSI Design System * * File: WeakReferences.java * Written by: Dmitry Nadezhin, Sun Microsystems. * * Copyright (c) 2003 Sun Microsystems and Static Free Software * * Electric(tm) is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or * (at your option) any later version. * * Electric(tm) is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with Electric(tm); see the file COPYING. If not, write to * the Free Software Foundation, Inc., 59 Temple Place, Suite 330, * Boston, Mass 02111-1307, USA. */package com.sun.electric.database.text;import java.lang.ref.WeakReference;import java.util.ArrayList;import java.util.Collections;import java.util.Iterator;/** * A pool of weak reference objects, which do not prevent their referents from being * made finalizable, finalized, and then reclaimed. This class may be used for keeping * a pool of some Listeners. This class is not synchronized */public class WeakReferences<E> { private final ArrayList<WeakReference<E>> references = new ArrayList<WeakReference<E>>(); /** * Constructs an empty pool. */ public WeakReferences() {} /** * Appends the specified element to the pool. * @param o specified element. * @return always true. */ public boolean add(E o) { references.add(new WeakReference<E>(o)); return true; } /** * Removes a single instance of the specified element from this * list, if it is present (optional operation). * Also purges references whose referents are not alive. * @param o speicified element. * @return true if element was removed. **/ public boolean remove(E o) { for (Iterator<WeakReference<E>> it = references.iterator(); it.hasNext(); ) { WeakReference<E> ref = it.next(); E i = ref.get(); if (i == null) { it.remove(); continue; } if (i == o) { it.remove(); return true; } } return false; } /** * Returns an iterator over live elements in this pool in proper sequence. * Also purges refetences whose referents are not alive. * @return an iterator over the elements in this pool in proper sequence. */ public Iterator<E> iterator() { return iterator(false); } /** * Returns an iterator over live elements in this pool in reverse sequence. * Also purges refetences whose referents are not alive. * @return an iterator over the elements in this pool in reverse sequence. */ public Iterator<E> reverseIterator() { return iterator(true); } private Iterator<E> iterator(boolean reverse) { ArrayList<E> items = new ArrayList<E>(); for (Iterator<WeakReference<E>> it = references.iterator(); it.hasNext(); ) { WeakReference<E> ref = it.next(); E i = ref.get(); if (i != null) items.add(i); else it.remove(); } if (reverse) Collections.reverse(items); return items.iterator(); }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -