12

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

将感谢任何想法。

4

6 回答 6

23

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

如果你有

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

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

于 2012-09-07T08:51:01.277 回答
13

您可以使用树图

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

于 2012-09-07T08:49:49.067 回答
1

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

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

于 2012-09-07T08:50:02.390 回答
1

您可以使用比较器..

    Collections.sort(yourCollection, new Comparator() {

    public int compare(YourObject o1, YourObject o2) {
         // put Comparesion according to your requirement 
        return AnyObject;
    }
});
于 2012-09-07T08:54:28.930 回答
0

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

于 2012-09-07T08:50:08.797 回答
0

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

于 2012-09-07T08:51:38.930 回答