Map<String, Integer> 和 Map<Integer ,String> 排序
Map<String, Integer> and Map<Integer ,String> sorting
我正在尝试解决对包含大量数据 (1000K) 的地图进行排序的问题。
有没有比这更有效的方法来对这些地图进行排序?
下面是代码片段。
Map<Integer, String> myMap1 = new HashMap<Integer, String>();
Map<String,Integer> myMap2 = new HashMap< String,Integer>();
List <Entry<Integer,String>> lst1 = new ArrayList<Entry<Integer,String>>(myMap1.entrySet());
Collections.sort(lst1, new Comparator<Entry<Integer,String>>(){
@Override
public int compare(Entry e1, Entry e2)
{
return ((String) e1.getValue()).compareTo((String) e2.getValue());
}}
);
List <Entry<String,Integer>> lst2 = new ArrayList<Entry<String,Integer>>(myMap2.entrySet());
Collections.sort(lst2, new Comparator<Entry<String,Integer>>(){
@Override
public int compare(Entry e1, Entry e2)
{
return ((Integer) e1.getValue()).compareTo((Integer) e2.getValue());
}}
);
IMO 优先队列也是一个好方法:
Map<Integer, String> myMap1 = new HashMap<Integer, String>();
PriorityQueue<Entry<Integer, String>> pq = new PriorityQueue<Map.Entry<Integer,String>>(myMap1.size(), new Comparator<Entry<Integer, String>>() {
@Override
public int compare(Entry<Integer, String> arg0, Entry<Integer, String> arg1) {
return arg0.getValue().compareTo(arg1.getValue());
}
});
pq.addAll(myMap1.entrySet());
while (!pq.isEmpty()) {
System.out.println(pq.poll());
}
此外 GoogleGuava 可能是一个不错的选择,因为它提供了一个可以反转的 BiMap 实现,然后只需对反转的映射键进行排序。
Map<Integer, String> myMap1 = new HashMap<Integer, String>();
// insert values in myMap
Map<String,Integer> myMap2 = myMap1.inverse();
SortedMap<Integer, Character> sortedInversed = new TreeMap<Integer, Character>(myMap2 );
我正在尝试解决对包含大量数据 (1000K) 的地图进行排序的问题。 有没有比这更有效的方法来对这些地图进行排序? 下面是代码片段。
Map<Integer, String> myMap1 = new HashMap<Integer, String>();
Map<String,Integer> myMap2 = new HashMap< String,Integer>();
List <Entry<Integer,String>> lst1 = new ArrayList<Entry<Integer,String>>(myMap1.entrySet());
Collections.sort(lst1, new Comparator<Entry<Integer,String>>(){
@Override
public int compare(Entry e1, Entry e2)
{
return ((String) e1.getValue()).compareTo((String) e2.getValue());
}}
);
List <Entry<String,Integer>> lst2 = new ArrayList<Entry<String,Integer>>(myMap2.entrySet());
Collections.sort(lst2, new Comparator<Entry<String,Integer>>(){
@Override
public int compare(Entry e1, Entry e2)
{
return ((Integer) e1.getValue()).compareTo((Integer) e2.getValue());
}}
);
IMO 优先队列也是一个好方法:
Map<Integer, String> myMap1 = new HashMap<Integer, String>();
PriorityQueue<Entry<Integer, String>> pq = new PriorityQueue<Map.Entry<Integer,String>>(myMap1.size(), new Comparator<Entry<Integer, String>>() {
@Override
public int compare(Entry<Integer, String> arg0, Entry<Integer, String> arg1) {
return arg0.getValue().compareTo(arg1.getValue());
}
});
pq.addAll(myMap1.entrySet());
while (!pq.isEmpty()) {
System.out.println(pq.poll());
}
此外 GoogleGuava 可能是一个不错的选择,因为它提供了一个可以反转的 BiMap 实现,然后只需对反转的映射键进行排序。
Map<Integer, String> myMap1 = new HashMap<Integer, String>();
// insert values in myMap
Map<String,Integer> myMap2 = myMap1.inverse();
SortedMap<Integer, Character> sortedInversed = new TreeMap<Integer, Character>(myMap2 );