我需要你的建议.首先,我想描述一些前提条件.
java.lang.Object
的hashCode()
和equals()
执行.Comparable
接口未实现.尺寸微不足道.首先,我试图自己解决这个问题.CopyOnWriteArray*
由于高内存消耗,我立即拒绝了收集.我已经读过,在罕见的写入情况下使用它们会更好.ConcurrentHashMap
在一般的套房,适合我的需要,但我没有找到方法,使取操作原子不同步.我已经停止了对ConcurrentSkipListSet
收集的调查.它包含了pollFirst
一个非常好的套件来获取对象.
我已经实施了我的解决方案ConcurrentSkipListSet
作为基础.除了一个小细节外,我的一切都很好.正如我上面提到的,我正在使用的对象没有实现Comparable
.因此,要使用选定的集合,我必须以某种方式实现Comparator
.这是我对这个界面的实现.在这个例子中,我直接使用java.lang.Object
而不是我的对象类型.我已经完成了这个'因为实现完全相同,差异只在类的通用部分.
import java.util.Comparator;
public class ObjectComparator implements Comparator<Object> {
public int compare(Object o1, Object o2) {
return o1.hashCode() - o2.hashCode();
}
}
Run Code Online (Sandbox Code Playgroud)
这种实现的缺点是显而易见的.我发现不能保证两个不同的对象会有不同的哈希码.在这种情况下,可能会丢失一些不可接受的物体.我想在不同对象的哈希码相同的情况下返回一些随机数,但我不确定它是否会破坏ConcurrentSkipListSet
实现.
关于描述的情况,我有两个一般性问题.
Comparator
这种方式为我的对象实现不返回0
不同的对象并保持ConcurrentSkipListSet
可操作性?提前感谢您的回答.
除了设计问题,在现代JVM上执行速度更快的是什么?
foo instanceof Bar
Run Code Online (Sandbox Code Playgroud)
要么
Bar.class.isInstance(foo)
Run Code Online (Sandbox Code Playgroud)
为什么?