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