📄 observablesortedset.java
字号:
package com.ibm.j2x.util.collection;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Comparator;
import java.util.Iterator;
import java.util.SortedSet;
import java.util.TreeSet;
import com.ibm.j2x.event.CollectionEvent;
import com.ibm.j2x.event.CollectionListener;
/**
* The ObservableSortedSet subclasses the TreeSet and
* overrides all the functions that change the internally
* stored collection. In the overridden function, it simply
* calls the super class's function and fires a
* CollectionEvent to let observers know the collection
* has changed.
* @author MAbernethy
*
*/
public class ObservableSortedSet extends TreeSet implements ObservableCollection
{
/** the observers of this collection */
protected ArrayList listeners = new ArrayList();
/**
* Constructs a new, empty set, sorted according to the elements' natural order.
*
*/
public ObservableSortedSet()
{
super();
}
/**
* Constructs a new, empty set, sorted according to the specified comparator. All elements inserted into the set must be mutually comparable by the specified comparator: comparator.compare(e1, e2) must not throw a ClassCastException for any elements e1 and e2 in the set. If the user attempts to add an element to the set that violates this constraint, the add(Object) call will throw a ClassCastException.
* @param c the comparator that will be used to sort this set. A null value indicates that the elements' natural ordering should be used.
*/
public ObservableSortedSet(Comparator c)
{
super(c);
}
/**
* Constructs a new set containing the elements in the specified collection, sorted according to the elements' natural order. All keys inserted into the set must implement the Comparable interface. Furthermore, all such keys must be mutually comparable: k1.compareTo(k2) must not throw a ClassCastException for any elements k1 and k2 in the set.
* @param c The elements that will comprise the new set.
*/
public ObservableSortedSet(Collection c)
{
super(c);
}
/**
* Constructs a new set containing the same elements as the specified sorted set, sorted according to the same ordering.
* @param s sorted set whose elements will comprise the new set.
*/
public ObservableSortedSet(SortedSet s)
{
super(s);
}
/**
* Calls the super class's corresponding method
* and fires a CollectionEvent.
*/
public boolean add(Object o)
{
boolean b = super.add(o);
fireCollectionEvent(new CollectionEvent(this, CollectionEvent.ADD));
return b;
}
/**
* Calls the super class's corresponding method
* and fires a CollectionEvent.
*/
public boolean remove(Object o)
{
boolean b = super.remove(o);
fireCollectionEvent(new CollectionEvent(this, CollectionEvent.REMOVE));
return b;
}
/**
* Calls the super class's corresponding method
* and fires a CollectionEvent.
*/
public boolean addAll(Collection c)
{
boolean b = super.addAll(c);
fireCollectionEvent(new CollectionEvent(this, CollectionEvent.ADD));
return b;
}
/**
* Calls the super class's corresponding method
* and fires a CollectionEvent.
*/
public boolean removeAll(Collection c)
{
boolean b = super.removeAll(c);
fireCollectionEvent(new CollectionEvent(this, CollectionEvent.REMOVE));
return b;
}
/**
* Calls the super class's corresponding method
* and fires a CollectionEvent.
*/
public void clear()
{
super.clear();
fireCollectionEvent(new CollectionEvent(this, CollectionEvent.REMOVE));
}
/**
* Calls the super class's corresponding method
* and fires a CollectionEvent.
*/
public boolean retainAll(Collection c)
{
boolean b = super.retainAll(c);
fireCollectionEvent(new CollectionEvent(this, CollectionEvent.REMOVE));
return b;
}
/**
* Adds a listener to this collection.
* @param l the CollectionListener
*/
public void addCollectionListener(CollectionListener l)
{
if ( ! listeners.contains(l))
listeners.add(l);
}
/**
* Removes the listener from this collection.
* @param l the CollectionListener
*/
public void removeCollectionListener(CollectionListener l)
{
listeners.remove(l);
}
/**
* Fires a CollectionEvent to all listeners.
* @param e the CollectionEvent
*/
protected void fireCollectionEvent(CollectionEvent e)
{
for (Iterator i=listeners.iterator(); i.hasNext();)
((CollectionListener)i.next()).collectionChanged(e);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -