package jef.common; import java.io.Serializable; import java.util.AbstractSet; import java.util.Iterator; import java.util.Set; import javax.xml.bind.annotation.XmlAccessType; import javax.xml.bind.annotation.XmlAccessorType; import jef.common.wrapper.ArrayIterator; import jef.tools.ArrayUtils; /** * 用List实现的最简单的Set,目标是占用内存最小,不考虑性能,事实上元素不多的情况下性能不是什么问题 * @param <K> * @param <V> */ @XmlAccessorType(XmlAccessType.FIELD) public class SimpleSet<K> extends AbstractSet<K> implements Set<K>, Serializable { private static final long serialVersionUID = -2332764981462364197L; private K[] data; @Override public Iterator<K> iterator() { return new ArrayIterator<K>(data==null?ArrayUtils.EMPTY_OBJECT_ARRAY:data); } @Override public int size() { if(data==null)return 0; return data.length; } @Override public boolean add(K e) { if(ArrayUtils.contains(data, e)){ return false; } data=ArrayUtils.addElement(data, e); return true; } public K[] getData() { return data; } public void setData(K[] data) { this.data = data; } }