为了实现SortedSet接口,实现几个方法,但效率有些不尽人意,求优化
/**
* 设定比较器
* @param comparator
*/
public void setComparator(Comparator<? super T>comparator){
this.comparator=comparator;
}
@Override
public Comparator<? super T> comparator() {
return this.comparator;
}
@Override
public T first() {
return this.getFirst();
}
@Override
public SortedSet<T> headSet(T toElement) {
SortedSet<T>result=new FastSet<T>();
for(T t:this){
if(t==null?toElement==null:t.equals(toElement))
result.add(t);
}
return result;
}
@Override
public T last() {
return this.get(this.size()-1);
}
@Override
public SortedSet<T> subSet(T fromElement, T toElement) {
SortedSet<T>result=new FastSet<T>();
if(toElement==null?fromElement==null:toElement.equals(fromElement))
return result;
for(T t:this){
if(t==null?fromElement==null:t.equals(fromElement))
result.add(t);
if(!result.isEmpty()&&t==null?toElement==null:t.equals(toElement))
break;
}
return result;
}
@Override
public SortedSet<T> tailSet(T fromElement) {
SortedSet<T>result=new FastSet<T>();
for(T t:this){
if(t==null?fromElement==null:t.equals(fromElement))
result.add(t);
}
return result;
}
/**
* 设定比较器
* @param comparator
*/
public void setComparator(Comparator<? super T>comparator){
this.comparator=comparator;
}
@Override
public Comparator<? super T> comparator() {
return this.comparator;
}
@Override
public T first() {
return this.getFirst();
}
@Override
public SortedSet<T> headSet(T toElement) {
SortedSet<T>result=new FastSet<T>();
for(T t:this){
if(t==null?toElement==null:t.equals(toElement))
result.add(t);
}
return result;
}
@Override
public T last() {
return this.get(this.size()-1);
}
@Override
public SortedSet<T> subSet(T fromElement, T toElement) {
SortedSet<T>result=new FastSet<T>();
if(toElement==null?fromElement==null:toElement.equals(fromElement))
return result;
for(T t:this){
if(t==null?fromElement==null:t.equals(fromElement))
result.add(t);
if(!result.isEmpty()&&t==null?toElement==null:t.equals(toElement))
break;
}
return result;
}
@Override
public SortedSet<T> tailSet(T fromElement) {
SortedSet<T>result=new FastSet<T>();
for(T t:this){
if(t==null?fromElement==null:t.equals(fromElement))
result.add(t);
}
return result;
}
另外,用TreeSet不好吗?
BlockingQueue的实现类的确有用,但我更倾向于使用它的双端阻塞和队列功能,因为它很明显不是一个Set,一个阻塞队列也没必要实现Set接口。
Atomic也很有用,但明显跑题了,主题里的这几个方法是用不上这个了。
ConcurrentSkipListSet也可以先进先出。
你还需要什么额外的方法?可以继承ConcurrentSkipListSet来做。//先进先出
ConcurrentSkipListSet<String> ccsls = new ConcurrentSkipListSet<String>(new Comparator<String> () {
@Override
public int compare(String arg0, String arg1) {
return 1;
}
});ccsls.add("C");
ccsls.add("A");
ccsls.add("D");
ccsls.add("B");
System.out.println(ccsls);