根据用户定义的标准对地图进行排序?

时间:2012-08-29 17:11:49

标签: java sorting hashmap comparator comparable

我有一张地图,其中我想要一些价值观点。

HashMap<String,String> hm = new HashMap<String,String>(); 
hm.put("Phone Number","998291829");
hm.put("Address","12 A Street");
hm.put("Name","Robert Singh");
hm.put("Email","robert@gmail.com");
-
-

我希望姓名和电子邮件作为第一个和第二个条目,我该怎么做。

5 个答案:

答案 0 :(得分:2)

HashMap不是已排序或可排序的集合。

您可以做的是将TreeMap与您自己的比较器一起使用。

但是,我怀疑你最好不要使用真正的类而不是ad-hoc Map。

答案 1 :(得分:0)

您应该使用HashMap而不是使用LinkedHashMap,因为它会保留添加元素的顺序。您必须按照需要的顺序添加元素。

答案 2 :(得分:0)

您可以使用树形图。构造函数接受比较器。

您可以传递自己的比较器实现,您可以在其中实现在地图中对数据进行排序的逻辑。

答案 3 :(得分:0)

我建议您创建一个bean,例如联系人或人,然后为此编写比较器。

所以一旦你完成了为它创建bean和比较器。然后

填充bean的列表/集合

并且最后做了

Collection.sort(yourlist,sortByNameComparator);

Collection.sort(yourlist,sortByemailComparator);

其中sortByNameComparator和sortByemailComparator是您创建的比较器。

看看这个。它肯定会解决你的问题。

Sorting an ArrayList of Contacts based on name?

以上是创建比较器的例子。

答案 4 :(得分:-1)

根据您的使用情况,您可能需要使用List<Pair>,其中Pair类似

public class Pair<J,K> {
    private J key;
    private K value;

    public Pair(J key, K value) {
        this.key = key;
        this.value = value;
    }

    public J getKey() {return key;}
    public K getValue() {return value;}
}