2012-08-29 62 views
0

我有一张地图,我希望有一些值可以在最上面。根据用户定义的标准对地图进行排序?

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","[email protected]"); 
- 
- 

我想要名称和电子邮件作为第一和第二项,我该怎么做。

+0

您是否希望将项目按插入方式排序? –

+0

我明白他希望他们按特定的顺序。 –

+0

没有实际的值和密钥来自caouchdb,我必须使用这张地图在u.i上显示。其中关键是标签,值是标签旁边的值。 – vikas27

回答

0

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

0

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

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

2

HashMap不是一个排序或排序的集合。

你可以做的是使用TreeMap和你自己的比较器。

但是,我怀疑你最好使用真实的类而不是专门的Map。

+0

我不会为性能原因建议使用treemap。对于这种情况,与自定义格子相关的哈希映射是可以的。 – Nomad

+0

LinkedHashMap不采用自定义比较器或自定义哈希函数。 –

-1

根据您的使用情况,您可能需要使用一个List<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;} 
} 
+0

这应该如何帮助当前问题中的OP?如果有人需要使用快速且良好的get方法,使用这个列表将变得毫无用处。 –

0

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

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

填充豆

列表/集合和最后做

Collection.sort(yourlist,sortByNameComparator);

Collection.sort(yourlist,sortByemailComparator);

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

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

Sorting an ArrayList of Contacts based on name?

上面具有例如,创建比较器。

相关问题