Amr*_*dey 6 java concurrency set
我使用ConcurrentSkipListSet并使用contains方法.
根据JAVA doc for contains方法
如果此set包含指定的元素,则返回true.更正式地说,当且仅当此集合包含o.equals(e)的元素e时才返回true.
但根据我的测试,似乎不使用equals方法,而是比较器是强制性的.请帮助我理解JAVA规范和实现之间的这种异常
ConcurrentSkipListSet
/***如果使用比较,返回ComparableUsingComparator,否则*投键具有可比性,这可能会导致ClassCastException异常, *其传播回调用者.*/private可比较(对象键)
在java.util.concurrent.ConcurrentSkipListMap.comparable(ConcurrentSkipListMap.java:663)在java.util.concurrent.ConcurrentSkipListMap.doGet(ConcurrentSkipListMap.java:821)在java.util.concurrent.ConcurrentSkipListMap.containsKey(ConcurrentSkipListMap.java:1608 )
我正在使用Oracle JDK 7
我认为有两个问题/担忧,(1)为什么 contains 需要 aComparator或Comparable。(2) Javadoc 说它将使用该equals方法。
编辑:还有一个throws文档说明这些对象不具有可比性
ClassCastException - 如果指定的元素无法与当前在此集合中的元素进行比较
| 归档时间: |
|
| 查看次数: |
1233 次 |
| 最近记录: |