几个方法求优化

为啥呢 2012-08-14 10:01:23
为了实现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;
}
...全文
236 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
scbb 2012-08-16
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 的回复:]

只有first()里的this.getFirst();我没贴,这个实际上就是get(0)

TreeSet不支持并发,ConcurrentSkipListSet虽然支持并发但只提供比较器和自然顺序2种排序,我还需要先进先出顺序,另外需要一些额外的方法。
[/Quote]

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);
为啥呢 2012-08-16
  • 打赏
  • 举报
回复
SynchronizedList我没用过,我只知道CopyOnWriterArrayList的并发写性能远低于它的并发读性能,因为它每次写操作都要复制一份数组。
BlockingQueue的实现类的确有用,但我更倾向于使用它的双端阻塞和队列功能,因为它很明显不是一个Set,一个阻塞队列也没必要实现Set接口。
Atomic也很有用,但明显跑题了,主题里的这几个方法是用不上这个了。
为啥呢 2012-08-16
  • 打赏
  • 举报
回复
[Quote=引用 14 楼 的回复:]

引用 3 楼 的回复:

只有first()里的this.getFirst();我没贴,这个实际上就是get(0)

TreeSet不支持并发,ConcurrentSkipListSet虽然支持并发但只提供比较器和自然顺序2种排序,我还需要先进先出顺序,另外需要一些额外的方法。


ConcurrentSkipListSet也可以先进先出。
你还需要什么额外的方法?可以继承Co……
[/Quote]
这样的话用比较器的都可以先进先出.....试试看先,3q
痕枫冷 2012-08-15
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 的回复:]

BlockingQueue只是接口,jdk中这个接口的实现类都不满足我的要求。
[/Quote]
你的需求是什么?
痕枫冷 2012-08-15
  • 打赏
  • 举报
回复
性能调优的时候可以优先考虑下AtomicInteger,AtomicReference等,众所周知,Atomic包中的类性能要好于Lock,Lock要好于synchronized。而且选择Lock的时候也要仔细考虑下,比如只想写入时,CopyOnWriterArrayList的性能就要比SynchronizedList好的多,有了这些神奇的工具,在这基础之上构建并发工具是很容易的。我仔细研究过,很多开源项目的源码都是在BlockingQueue的基础上构建的,所以由我上面的建议,LZ可以试试,我也比较喜欢用这些同步工具。
痕枫冷 2012-08-15
  • 打赏
  • 举报
回复
因为BlockingQueue这个接口的扩展实例比较简单,而且并发性比较好,比如JavaSE新类库中的很多同步工具都跟BlockingQueue有着异曲同工之妙,比如CyclicBarrier,CountDownLatch,那么,从你给的代码可以看出,你需要的是既有SortedSet的效果,又能在多线程环境下工作,那么建议你在BlockingQueue上组合Atomic包中的同步工具,然后使用Executors框架。

要还是不行,你可以试着定制ThreadFactory,这样的代码是很容易实现的,而且不用你自己去同步代码,并发性要好于一般的synchronized或者Lock,可以一试。
为啥呢 2012-08-15
  • 打赏
  • 举报
回复
BlockingQueue只是接口,jdk中这个接口的实现类都不满足我的要求。
scbb 2012-08-15
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 的回复:]

引用 8 楼 的回复:

引用 7 楼 的回复:

引用 6 楼 的回复:

引用 5 楼 的回复:

BlockingQueue只是接口,jdk中这个接口的实现类都不满足我的要求。

你的需求是什么?

我的需求是优化主题中的方法,而不是跑题...


你的性能期待指标是什么??优化到什么结果算OK呢?
比如在什么电脑配置下,
多大的数据量,然后需要多……
[/Quote]

LZ你写的已经非常棒了!
为啥呢 2012-08-15
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 的回复:]

引用 7 楼 的回复:

引用 6 楼 的回复:

引用 5 楼 的回复:

BlockingQueue只是接口,jdk中这个接口的实现类都不满足我的要求。

你的需求是什么?

我的需求是优化主题中的方法,而不是跑题...


你的性能期待指标是什么??优化到什么结果算OK呢?
比如在什么电脑配置下,
多大的数据量,然后需要多少时间内完成插入或者什么其他处理……
[/Quote]
为执行效率改进,没有指定目标
scbb 2012-08-15
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 的回复:]

引用 6 楼 的回复:

引用 5 楼 的回复:

BlockingQueue只是接口,jdk中这个接口的实现类都不满足我的要求。

你的需求是什么?

我的需求是优化主题中的方法,而不是跑题...
[/Quote]

你的性能期待指标是什么??优化到什么结果算OK呢?
比如在什么电脑配置下,
多大的数据量,然后需要多少时间内完成插入或者什么其他处理。

为啥呢 2012-08-15
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 的回复:]

引用 5 楼 的回复:

BlockingQueue只是接口,jdk中这个接口的实现类都不满足我的要求。

你的需求是什么?
[/Quote]
我的需求是优化主题中的方法,而不是跑题...
为啥呢 2012-08-14
  • 打赏
  • 举报
回复
只有first()里的this.getFirst();我没贴,这个实际上就是get(0)

TreeSet不支持并发,ConcurrentSkipListSet虽然支持并发但只提供比较器和自然顺序2种排序,我还需要先进先出顺序,另外需要一些额外的方法。
scbb 2012-08-14
  • 打赏
  • 举报
回复
能贴全部代码吗?
另外,用TreeSet不好吗?
痕枫冷 2012-08-14
  • 打赏
  • 举报
回复
使用BlockingQueue如何?

62,615

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧