如何按字母顺序排列哈希集?

时间:2012-09-07 08:46:23

标签: java collections hashset

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

感谢任何想法。

6 个答案:

答案 0 :(得分:18)

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

如果你有

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

然后该集的内容将是A,B,C

答案 1 :(得分:13)

您可以使用TreeMap

  

基于红黑树的NavigableMap实现。地图根据其键的自然顺序进行排序,或者根据使用的构造函数在地图创建时提供的比较器进行排序。

答案 2 :(得分:1)

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

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

答案 3 :(得分:1)

您可以使用 Comparator ..

    Collections.sort(yourCollection, new Comparator() {

    public int compare(YourObject o1, YourObject o2) {
         // put Comparesion according to your requirement 
        return AnyObject;
    }
});

答案 4 :(得分:0)

你看过TreeMap了吗?它基于红黑树,有助于维持订购,但仍然可以快速访问。

答案 5 :(得分:0)

TreeMap应该符合您的要求。如果您的密钥不是文字,那么在TreeMap构造函数中使用适当的Comparator