我需要你的建议.首先,我想描述一些前提条件.
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)
为什么?