【问题标题】:Java - I have a HashSet of Strings, and I want to somehow sort these strings by their lengthJava - 我有一个字符串的 HashSet,我想以某种方式按它们的长度对这些字符串进行排序
【发布时间】:2012-02-13 04:40:56
【问题描述】:

我真的只需要某种方法来找到 hashSet 中长度最大的所有字符串(无论是一个字符串还是多个字符串)。我想我应该先以某种方式对字符串长度的集合进行排序,然后再遍历它(从最长的字符串到最短的字符串,这样我就可以在看到所有最大长度的字符串后停止迭代)。谁能帮我弄清楚如何最好地解决这个问题(主要是关心如何有效地按长度对它们进行排序)?谢谢。

【问题讨论】:

  • 您描述了一个 O(n log n) 算法,该算法的天真实现是 O(n):只需迭代一次,跟踪最长的字符串长度,然后再次获取该长度的所有字符串(这两个可以合并,但这可能不会更快)。
  • @perelman:哇,这么简单却这么聪明。谢谢!

标签: java string data-structures hashset


【解决方案1】:

通过将字符串存储在HashSet 中以进行快速查找所获得的效率在尝试查找最长字符串时对您没有帮助。您需要为此更新数据结构。

一种选择是存储两个单独的数据结构 - 一个字符串集TreeSet<Set<String>>,其中TreeSet 的比较器只比较字符串的长度,加上之前的HashSet。您可以通过更新TreeSet 中的适当集合以包含新字符串并将字符串插入到HashSet 中,从而有效地将字符串插入到此混合数据结构中。它还可以让您通过查询 TreeSet 的最大元素来有效地找到所有最大的字符串。

希望这会有所帮助!

【讨论】:

  • 谢谢,我正在考虑使用 treeSet。尽管这在某些情况下肯定会起作用,但在我的情况下,我已经拥有包含所有字符串的散列(在我得到它时不会再添加)。因此,在这种特殊情况下,对我来说,按照佩雷尔曼在我的主要帖子中提出的建议更有意义。不过还是谢谢。
猜你喜欢
  • 2016-04-23
  • 1970-01-01
  • 2011-11-26
  • 2015-10-16
  • 2016-02-09
  • 1970-01-01
  • 1970-01-01
  • 2015-01-16
  • 1970-01-01
相关资源
最近更新 更多