map排序java
⑴ java map容器 哪些排序
一.理论准备
Map是键值对的集合接口,它的实现类主要包括:HashMap,TreeMap,Hashtable以及LinkedHashMap等。
TreeMap:基于红黑树(Red-Black tree)的 NavigableMap 实现,该映射根据其键的自然顺序进行排序,或者根据创建映射时提供的 Comparator 进行排序,具体取决于使用的构造方法。
HashMap的值是没有顺序的,它是按照key的HashCode来实现的,对于这个无序的HashMap我们要怎么来实现排序呢?参照TreeMap的value排序。
Map.Entry返回Collections视图。
二.key排序
TreeMap默认是升序的,如果我们需要改变排序方式,则需要使用比较器:Comparator。Comparator可以对集合对象或者数组进行排序的比较器接口,实现该接口的public compare(T o1,To2)方法即可实现排序,如下:
import java.util.Comparator;import java.util.Iterator;import java.util.Map;import java.util.Set;import java.util.TreeMap;public class TreeMapTest { public static void main(String[] args) { Map<String, String> map = new TreeMap<String, String>( new Comparator<String>() { public int compare(String obj1, String obj2) { // 降序排序 return obj2.compareTo(obj1); } }); map.put("b", "ccccc"); map.put("d", "aaaaa"); map.put("c", "bbbbb"); map.put("a", "ddddd"); Set<String> keySet = map.keySet(); Iterator<String> iter = keySet.iterator(); while (iter.hasNext()) { String key = iter.next(); System.out.println(key + ":" + map.get(key)); } }}
运行结果如下:
d:aaaaac:bbbbbb:ccccca:ddddd
三.value排序
上面例子是对根据TreeMap的key值来进行排序的,但是有时我们需要根据TreeMap的value来进行排序。对value排序我们就需要借助于Collections的sort(List<T> list, Comparator<? super T> c)方法,该方法根据指定比较器产生的顺序对指定列表进行排序。但是有一个前提条件,那就是所有的元素都必须能够根据所提供的比较器来进行比较,如下:
import java.util.ArrayList;import java.util.Collections;import java.util.Comparator;import java.util.List;import java.util.Map;import java.util.Map.Entry;import java.util.TreeMap;public class TreeMapTest { public static void main(String[] args) { Map<String, String> map = new TreeMap<String, String>(); map.put("a", "ddddd"); map.put("c", "bbbbb"); map.put("d", "aaaaa"); map.put("b", "ccccc"); //这里将map.entrySet()转换成list List<Map.Entry<String,String>> list = new ArrayList<Map.Entry<String,String>>(map.entrySet()); //然后通过比较器来实现排序 Collections.sort(list,new Comparator<Map.Entry<String,String>>() { //升序排序 public int compare(Entry<String, String> o1, Entry<String, String> o2) { return o1.getValue().compareTo(o2.getValue()); } }); for(Map.Entry<String,String> mapping:list){
System.out.println(mapping.getKey()+":"+mapping.getValue());
}
}}
运行结果如下:
d:aaaaac:bbbbbb:ccccca:ddddd
⑵ java中map的排序问题
HashMap里面的元素是无序的,要进行排序的话只能是用TreeMap和SortedMap,例如:
public static void main(String[] args) throws Exception{
Map<String, Integer> map=new TreeMap<String, Integer>();
map.put("1", 1);
map.put("9", 9);
map.put("4", 4);
map.put("2", 2);
map.put("8", 8);
map=mapSortByKey(map);
System.out.println(map.toString());
}
private static SortedMap<String, Integer> mapSortByKey(Map<String, Integer> unsort_map) {
TreeMap<String, Integer> result = new TreeMap<String, Integer>();
Object[] unsort_key = unsort_map.keySet().toArray();
Arrays.sort(unsort_key);
for (int i = 0; i < unsort_key.length; i++) {
result.put(unsort_key[i].toString(), unsort_map.get(unsort_key[i]));
}
return result.tailMap(result.firstKey());
}
⑶ java map,怎么保证顺序
java map 是一个接口,其有个子接口是SortedMap,进一步提供关于键的总体排序 的 Map。该映射是根据其键的自然顺序进行排序的,或者根据通常在创建有序映射时提供的 Comparator 进行排序。对有序映射的 collection 视图(由 entrySet、keySet 和 values 方法返回)进行迭代时,此顺序就会反映出来。要采用此排序方式,还需要提供一些其他操作(此接口是 SortedSet 的对应映射)。
LinkedHashMap 维护着一个运行于所有条目的双重链接列表。此链接列表定义了迭代顺序,该迭代顺序通常就是将键插入到映射中的顺序(插入顺序)。
⑷ 如何对Map进行字典排序Java
//根据 Map的key进行字典排序
Map<String, String> parameterMap = new HashMap<String, String>();
List<Map.Entry<String,String>> list = new ArrayList<Map.Entry<String,String>>(parameterMap.entrySet());
Collections.sort(list,new Comparator<Map.Entry<String,String>>() {
//升序排序
public int compare(Entry<String, String> o1,
Entry<String, String> o2) {
return o1.getKey().compareTo(o2.getKey());
}
});
⑸ java map 怎么按按key排序
java中map按照double大小进行排序,可以使用collentions接口的sort方法进行比较,实例如下:
Collections.sort(dataMap, new Comparator<Map<String, Object>>() { @Override public int compare(Map<String, Object> lhs, Map<String, Object> rhs) { Double d5 = ((Double) rhs.get(OpenPrice)); Double d6 = (Double) lhs.get(OpenPrice); if (d5 != null && d6 != null) { return d5.compareTo(d6); } else { return flag; } // return d1.compareTo(d2);}
根据返回的int类型,可设置按照从大到小还是从小到大排序
⑹ java map 先后顺序
通过map中的LinkedHashMap实现就可以。
HashMap<String,String> headers = new LinkedHashMap<String,String>();//创建一个map
headers.put("Cache-Control", "no-cache");//给map赋第一个值
headers.put("Connection", "close");//给map赋第二个值
Set keys1 = headers.keySet();//获取所有的key值
System.out.println(keys1);
结果:[Cache-Control,Connection];//结果就是先进先出
备注:以上HashMap就是先定义了存放的key和value值都是字符串类型,之后可以通过get方法获取到对应的值(如:headers.get("Cache-Control"),结果就是”no-cache“);
⑺ java中map如何按double排序
java中map按照double大小进行排序,可以使用collentions接口的sort方法进行比较,实例如下:
Collections.sort(dataMap,newComparator<Map<String,Object>>(){
@Override
publicintcompare(Map<String,Object>lhs,Map<String,Object>rhs){
Doubled5=((Double)rhs.get(OpenPrice));
Doubled6=(Double)lhs.get(OpenPrice);
if(d5!=null&&d6!=null){
returnd5.compareTo(d6);
}else{
returnflag;
}
//returnd1.compareTo(d2);
}
根据返回的int类型,可设置按照从大到小还是从小到大排序
⑻ Java中 map集合能排序吗
Java中的Map默认是对元素不排序的,但是Map的实现类TreeMap能够把它保存的记录根据key排序,默认是按升序排序。如果我们想要改变排序方式,则需要使用比较器:Comparator。
⑼ Java的map能不能排序
官方jdk里面提供的map接口实现类基本是不能用来排序的,sortmap或者treemap排序是可以的,但是比较复杂,效率也成问题,所以不常使用.
如果一定要能排序的map,可以自己写一个map的实现类.
现成的代码通过短信给你.
⑽ java list<map> 排序
用我这个排序不是更简单么
importjava.util.ArrayList;
importjava.util.Collections;
importjava.util.Comparator;
importjava.util.HashMap;
importjava.util.List;
importjava.util.Map;
publicclass${
publicstaticvoidmain(String[]args){
List<Map<Object,Object>>list=newArrayList<Map<Object,Object>>();
Map<Object,Object>map=newHashMap<Object,Object>();
Map<Object,Object>map1=newHashMap<Object,Object>();
Map<Object,Object>map2=newHashMap<Object,Object>();
Map<Object,Object>map3=newHashMap<Object,Object>();
map.put("number",1);
map1.put("number",2);
map2.put("number",4);
map3.put("number",3);
list.add(map);
list.add(map1);
list.add(map2);
list.add(map3);
Collections.sort(list,newComparator<Map<Object,Object>>(){
publicintcompare(Map<Object,Object>o1,Map<Object,Object>o2){
intmap1value=(Integer)o1.get("number");
intmap2value=(Integer)o2.get("number");
returnmap1value-map2value;
}
});
System.out.println(list);
}
}