【问题标题】:What algorithm does java contains() method use?java contains() 方法使用什么算法?
【发布时间】:2017-08-31 06:57:38
【问题描述】:

我想在我拥有的 HashSet 中有效地搜索一个对象。

我想知道 java 集合中定义的 contains() 方法是否使用二分查找?还是我应该编写自己的二分搜索算法?

【问题讨论】:

  • "HashSet" 和 "binary search" 不适合。原因:二分查找需要一个排序的(因此是有序的)集合,而 hash 集合根据定义是无序的。
  • "假设散列函数在桶中正确地分散元素,此类为基本操作(添加、删除、包含和大小)提供恒定的时间性能。"
  • HashSet 没有排序,因此您将无法运行二进制搜索。 contains() 的工作方式:它计算 contains() 参数的“指纹”。然后它检查它是否知道这个指纹。完成。

标签: java collections binary-search


【解决方案1】:

HashSet 中的一般搜索复杂度为O(1) - 意味着它是恒定的。自己写?那么这个更好吗?

您绝对可以查看源代码,了解 HashSet 在内部实际上是 HashMap;它使用存储桶、LinkedNodes 和 TreeNodes;了解这些是如何工作的,等等。或者信任好的实现并专注于其他东西;除非你真的需要更快的东西。

【讨论】:

  • 您好,感谢您的信息。我觉得你说的很有用。我正在使用哈希集来存储从数据库中检索到的一些对象。有时我想检查某个对象是否在集合中。从您提到的内容来看, contains() 方法应该适合我的目的。
猜你喜欢
  • 2019-05-03
  • 2013-12-02
  • 2015-07-03
  • 2019-05-09
  • 2020-09-25
  • 2014-08-20
  • 1970-01-01
  • 1970-01-01
  • 2018-11-15
相关资源
最近更新 更多