当前位置: 首页 > 面试题库 >

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

居英资
2023-03-14
问题内容

我知道Set中只允许根据.equals()的任何对象的一个​​实例,并且如果您已经有一个等效的对象,则不应“需要”从Set中获取一个对象,但是我仍然想有一个.get()方法,该方法返回给定等效对象作为参数的Set中对象的实际实例(或null)。

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

我通常必须通过使用Map并使其键和值相同或类似的方法来解决这个问题。

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

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


问题答案:

尽管pure变量确实使方法令人get(Object)怀疑,但其根本意图并非没有意义。

有一些稍微重新定义的类和接口系列equals(Object)。一个需求只不过是集合接口。例如,一个ArrayList和一个LinkedList可以相等。它们各自的内容只需相同且顺序相同。

因此,有很好的理由找到集合中的 匹配 元素。可能更清晰的表示意图的方法是使用类似

public interface Collection<E> extends ... {
  ...
  public E findMatch(Object o) throws UnsupportedOperationException;
  ...
}

请注意,此API具有比Set中更广泛的价值。

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



 类似资料:
  • 问题内容: 我确信这是有充分理由的,但是有人可以解释一下为什么缺少接口或任何类似方法吗? 集合似乎很适合放入东西,但我找不到从其中检索单个项目的优雅方法。 如果我知道我想要第一个项目,则可以使用,但否则似乎必须转换为数组才能在特定索引处检索项目? 从集合中检索数据的适当方法是什么?(除了使用迭代器之外) 我敢肯定,将其排除在API中这一事实意味着有充分的理由不这样做-有人可以启发我吗? 编辑: 这

  • 服务器: 客户: 服务器开始侦听: 每个客户端连接将获得一个单独的套接字进行通信,所有的套接字都使用相同的服务器端TCP端口进行通信。

  • 为了防止实现细节泄漏,可以实现,而不是返回,然后需要从接口实现。因此,无论内部数据结构如何管理,对元素的访问都是通过进行的。 对于Java8,可能希望将添加到。(另请参阅《Java8lambdas》一书中关于支持的建议)。虽然添加方法并不困难(我也读过关于为什么Iterable不提供流的问题),但奇怪的是Java没有为添加接口来镜像思想。(好吧,可能有一个不同的名称,因为是为了永远使用CORBA的

  • 问题内容: 有人知道为什么JUnit 4提供但不提供方法吗? 它提供了(对应于)和(对应于),因此它们似乎没有包含在内就显得很奇怪。 顺便说一下,我知道JUnit插件提供了我正在寻找的方法。我只是出于好奇而问。 问题答案: 我建议您使用较新的样式断言,该断言可以轻松描述各种否定形式,并在断言失败时自动构建对您的期望和得到的结果的描述: 这三个选项都是等效的,请选择最容易阅读的一个。 要使用方法的简

  • 我很想知道为什么Java的可选不提供类似于流的方法。 接口的method javadoc声明: @apiNote此方法主要用于支持调试,您希望在元素流经管道中的某个点时看到这些元素 这几乎完全描述了我的用例: (返回 方法,上述所有内容都会转换为: 也可以这样做(参见此答案): 并将其与方法一起使用: 但我认为这是一个黑客,而不是的干净用法。 从Java 9开始,可以将< code>Optiona

  • 问题内容: 使用a 提供一个custom很简单,从而覆盖了添加到地图的对象所提供的语义。但是不能以这种方式控制;提供哈希值和相等性检查的函数不能“侧加载”。 我怀疑设计一个接口并将其改造成(或一个新类)既简单又有用?像这样的东西,除了名字更好: 在不区分大小写Map的问题得到了平凡解: 这是可行的,还是您会看到这种方法的任何基本问题? 现有(非JRE)库中是否使用了这种方法?(尝试过Google,