【问题标题】:How do i keep a hashset alphabetically ordered?如何保持哈希集按字母顺序排列?
【发布时间】:2012-09-07 08:46:22
【问题描述】:

我有一个由名称/值对定义的 大量 个对象的集合。 我需要快速访问它们的任何值,并能够按名称按字母顺序返回它们。首先,我想我可能会使用 HashMap 来快速访问。但它没有给我任何命令。我决定切换到 LinkedHashSet。
它的问题是我需要能够在列表的正确位置 insert 新对象,但 LinkedHashSet 不允许这样做。我还需要能够通过索引和名称访问对象。

将感谢任何想法。

【问题讨论】:

    标签: java collections hashset


    【解决方案1】:

    您可以使用TreeMap

    基于红黑树的 NavigableMap 实现。地图根据其键的自然顺序排序,或者由地图创建时提供的 Comparator 排序,具体取决于使用的构造函数。

    【讨论】:

    • 看起来这就是我需要的。谢谢。
    • 这是错误的答案。 TreeMap 不像 Set 那样保证奇异性。改用 TreeSet
    • 注意:TreeSet 中不允许重复对象,但 TreeMap 中允许。
    【解决方案2】:

    为什么不试试TreeSet。您的列表不允许重复吗?如果是这样,那么 Set 应该没问题。当您添加字符串并实现 Comparator 时,该集合将自动为您排序

    如果你有

    Set<String> s = new TreeSet<String>();
    s.add("B");
    s.add("C");
    s.add("A");
    

    那么集合的内容将是 A、B、C

    【讨论】:

      【解决方案3】:

      您可以使用 Comparator ..

          Collections.sort(yourCollection, new Comparator() {
      
          public int compare(YourObject o1, YourObject o2) {
               // put Comparesion according to your requirement 
              return AnyObject;
          }
      });
      

      【讨论】:

        【解决方案4】:

        我会使用一个 TreeSet,它是一个 SortedSet。您需要根据名称将自定义类定义为 Comparable,这样您的集合将始终被排序。

        注意:排序集合的访问时间为 O(log N)。

        【讨论】:

          【解决方案5】:

          你看过TreeMap吗?它基于有助于维持秩序的红黑树,但仍然提供快速访问。

          【讨论】:

            【解决方案6】:

            TreeMap 应该可以满足您的要求。如果您的键不是文字,则在 TreeMap 构造函数中使用适当的Comparator

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 2013-05-19
              • 2015-06-06
              • 1970-01-01
              • 2014-08-24
              • 2015-02-07
              • 2020-11-30
              • 2013-06-06
              • 1970-01-01
              相关资源
              最近更新 更多