【问题标题】:Retrieve an object using Collections.binarySearch使用 Collections.binarySearch 检索对象
【发布时间】:2011-03-03 01:22:14
【问题描述】:

我声明了一个带有id, Name, age, contactNumber and Address 属性的 POJO 类。我声明了所有的 getter 和 setter。现在我使用HashMap<String, POJO_CLASS>。默认情况下,我按Name 属性对这些值进行排序。现在我需要通过 id 搜索对象,并且该方法应该返回一个对象(作为值存储在 HashMap 中)。那么我如何使用Collections.binarySearch() 来满足这个要求。

【问题讨论】:

  • 这是关于通过 id 有效地查找对象,还是特别是关于 binarySearch
  • id的类型是什么,你的对象的什么字段作为你的map的key?
  • 实际上我的 POJO 类有 500 多个对象,我必须按 id 搜索对象,所以认为这是最好的方法。有没有别的办法?如果有其他方法,请指导我。
  • 另外,当您说按名称对这些值进行排序时,您的意思是什么? HashMap 不会对其内容进行排序。

标签: java collections binary-search


【解决方案1】:

500 个对象并不多,所以我只需将它们放在以 id 为键的第二个 HashMap 中。

【讨论】:

    【解决方案2】:

    更好的问题是您为什么要这样做。 HashMap 查找将非常快,O(1) 时间,而在具有随机访问能力的列表 (ArrayList) 上二进制搜索将花费 O(lg(N)) 时间。

    如果您真的想要使用二进制搜索,那么您需要将对象存储在一个列表中(可能是 ArrayList)并对该列表进行排序,然后调用Collections.binarySearch(list, value)

    【讨论】:

      【解决方案3】:

      如果您需要通过名称和 id 快速查找,则需要将 POJO 永久存储在两种不同的数据结构中。在这种情况下,从 id 构建第二个 HashMap 将为您提供最佳性能。

      如果地图不是那么大,或者通过 id 查找相对很少发生,这可能会变得不必要地复杂。在这种情况下,我只需通过 HashMap 进行线性搜索。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-12-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-10-30
        相关资源
        最近更新 更多