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