getset接口java_为什么java.util.Set接口不提供get(Object o)方法?

据我所知,在一个Set中只允许根据.equals()的任何对象的一个​​实例,如果你已经拥有一个等效的对象,你不应该“需要”从Set中获取一个对象,但我仍然希望有一个.get()方法,它给出一个等效对象作为参数的Set(或null)中对象的实际实例.

关于它为什么这样设计的任何想法/理论?

我通常不得不通过使用Map并使键和值相同或类似的东西来解决这个问题.

编辑:到目前为止,我认为人们不理解我的问题.我想要已经在集合中的确切对象实例,而不是可能不同的对象实例,其中.equals()返回true.

至于为什么我会想要这种行为,通常.equals()不会考虑对象的所有属性.我想提供一些虚拟查找对象并获取Set中的实际对象实例.

解决方法:

虽然pure参数确实使方法get(Object)成为可疑,但潜在的意图并非没有实际意义.

有各种类和接口系列稍微重新定义equals(Object).只需要集合界面就可以了.例如,ArrayList和LinkedList可以相等;它们各自的内容只需要是相同的并且顺序相同.

因此,找到集合中的匹配元素有很好的理由.也许更明确的表达意图的方法是使用类似的方法

public interface Collection extends ... {

...

public E findMatch(Object o) throws UnsupportedOperationException;

...

}

请注意,此API的值大于Set中的值.

至于问题本身,我没有任何关于为什么省略这种操作的理论.我会说最小生成集参数不成立,因为集合API中定义的许多操作都是出于方便和高效的原因.

标签:java,collections,generics

来源: https://codeday.me/bug/20190926/1821536.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值