对于你们许多人来说这应该很容易,但对我来说,当我回到基本的Java编码时,需要进行另一次生锈。在其他语言中长时间使用血腥关联数组已经让我感觉很好并且被宠坏了。 :P
我的问题很简单:我在列表中存储一组对象,每个对象包含一个字符串和一个数字。我希望插入此列表的每个对象按字母顺序按字符串排序。我也希望能够通过字符串从列表中检索对象。我想尽可能正式和/或有效地做到这一点。
Java标准库中是否有可用的东西?
答案 0 :(得分:8)
有一个很棒的writeup on java collections可以满足您的大部分需求。
关于此的简短建议:将TreeMap(比较者c)与自定义比较器一起使用。 key是字符串,value是带字符串和数字的复合对象
答案 1 :(得分:3)
听起来像SortedMap。将String作为键,将Number作为值。
答案 2 :(得分:2)
除了SortedMap之外,您可以使用
TreeSet<Pair<String, Number>>
来提供比较器以对对进行排序(或使您的Pair类实现Comparable并在那里进行)。 p>
这使得对象与数据结构分离,而对于像这样的简单示例而言,这不是什么大问题,你可以想象TreeSet&lt; MyObject&gt;其中MyObject实现Comparable从长远来看更容易理解。
答案 3 :(得分:1)
如果列表中的对象之间有重复的字符串值,您可能需要查看 Google Collections' TreeMultimap。使用TreeMultimap,不仅键被排序,而且具有相同键的所有值也存储在集合中。
Multimap<String, Pair> mm = new TreeMultimap<String, Pair>(
new Comparator<String>(){...},
new PairComparator());
mm.put("A", new Pair("A", 1));
mm.put("B", new Pair("B", 2));
mm.put("B", new Pair("B", 3));
Collection values = mm.values();
// values are [Pair("A", 1), Pair("B", 2), Pair("B", 3)]
Collection bValues = mm.get("B");
// bValues are [Pair("B", 2), Pair("B", 3)]
答案 4 :(得分:-1)
我做了类似的事情,我使用ArrayList存储它们的对象并编写比较器来对arraylist进行排序。