当前位置: 代码迷 >> J2SE >> Map跟List排序
  详细解决方案

Map跟List排序

热度:94   发布时间:2016-04-23 20:03:24.0
Map和List排序
list排序方法:Collections.sort(list)顺序排序,Collections.sort(list,Comparator<T>);自定义排序;这里结合的排序针对的是list,也就是说对于集合排序调用即可;
这里要说明Comparator它的泛型类型要与list的元素类型相同;比如List<String> list,而相对应的应该是Comparator<String>
List 和Map
List,集合,实现类ArrayList的有三种构造方法,
ArrayList()     构造一个初始容量为 10 的空列表。
ArrayList(Collection<? extends E> c) 将集合中的元素放到当前的列表中
ArrayList(int initialCapacity)    构造一个具有指定初始容量的空列表。
不常用的第二种方法就是解决map排序的关键。
我们知道遍历map时候有种方法for(Entry entry:map.entrySet())利用的就是Map.entry这个类,map.entrySet()可以看做是map变成集合set了
如果我们可以将map变成List,然后List在排序,那么就解决了Map排序的问题了。可以把Map.Entry变成List集合的元素,然后调用上面的第二种构造方法这样就把Map传遍成list了,如:List<Map.Entry<String, Integer>> mList = new ArrayList<Map.Entry<String, Integer>>(map.entrySet())
private static List<Integer> list;
 private static Map<String, Integer> map;
 
 static {
  list = new ArrayList<Integer>();
  Random r = new Random();
  for(int i=0;i<10;i++){
   list.add(r.nextInt(100));
  }
  map = new HashMap<String, Integer>();
  map.put("apple", 10);
  map.put("banana", 15);
  map.put("origin", 5);
  map.put("grape", 12);
 }
 public static void main(String[] args) {
  System.out.println(list.toString());
  Collections.sort(list,new Comparator<Integer>() {
   @Override
   public int compare(Integer o1, Integer o2) {
    return o2-o1;
   }
  });
  System.out.println(list.toString());
 
  List<Map.Entry<String, Integer>> mList = new ArrayList<Map.Entry<String, Integer>>(map.entrySet());
  Collections.sort(mList,new Comparator<Map.Entry<String, Integer>>() {
   @Override
   public int compare(Entry<String, Integer> o1,
     Entry<String, Integer> o2) {
    return o1.getValue()-o2.getValue();
   }
  });
  for(Map.Entry<String, Integer> en:mList){
   System.out.println(en.getKey()+";"+en.getValue());
  }
  List<Map.Entry<String, Integer>> llList = new ArrayList<Map.Entry<String,Integer>>(map.entrySet());
  Collections.sort(llList,new Comparator<Map.Entry<String, Integer>>() {
   @Override
   public int compare(Entry<String, Integer> o1,
     Entry<String, Integer> o2) {
    // TODO Auto-generated method stub
    return 0;
   }
  });
 
 }

------解决思路----------------------
楼主,你想问啥
  相关解决方案