所述Collection.contains()方法检查如果一个集合包含一个给定的对象,使用该.equals()
方法来执行比较.
来自Java7 Javadoc:
boolean contains(Object o)
如果此collection包含指定的元素,则返回true.更正式地,当且仅当此集合包含至少一个元素e时才返回true(o == null?e == null:o.equals(e)).
有没有一种聪明的方法来检查集合是否包含一个对象o
,而是通过引用进行比较(即o==e
)?
当然,我可以遍历集合并进行检查,我正在寻找可以做到这一点的现有功能.
澄清:
equals()
集合中对象的实现如何,我都想执行此操作.编辑:
即使我的问题是关于实现的一般解决方案,也可以理解子接口的Collection
特定情况Collection
.
ars*_*jii 38
对于我们这些使用Java 8的人来说,这Collection#stream()
是一个干净的选择:
collection.stream().anyMatch(x -> x == key)
Run Code Online (Sandbox Code Playgroud)
fge*_*fge 11
有一些解决方法......
您可以使用IdentityHashMap
,以Void
作为值(或任何其他-你的选择).然后,您可以使用contains()
它.keySet()
来检查元素的存在(或.containsKey()
直接在地图上).
第二种解决方法是使用番石榴Equivalence.identity()
; 但是你Collection
必须要有类型的元素,Equivalence.Wrapper<X>
你必须wrap
在检查之前......
奇怪的是,JDK没有提供IdentityHashSet
.考虑到HashSet
使用a 的内部实现,这是相当奇怪的HashMap
,所以人们不得不想知道为什么他们没有为IdentityHashMap
... 做同样的事情.
附注:文件Collection
具有误导性; 并非所有Collection
实现都依赖于.equals()
.例如,参见SortedSet
或SortedMap
.当然,IdentityHashMap
.
归档时间: |
|
查看次数: |
35933 次 |
最近记录: |