zoukankan      html  css  js  c++  java
  • ArrayList排序

    下面是排序的代码:

    package com.study;
    
    import java.util.ArrayList;
    import java.util.Collections;
    import java.util.Comparator;
    import java.util.HashMap;
    import java.util.List;
    import java.util.Map;
    
    public class ComparableTest {
    
        public static void main(String[] args) {
            List<Map<String, String>> list = new ArrayList<Map<String, String>>();

    //插入测试数据 Map
    <String, String> tmp; tmp = new HashMap<String, String>(); tmp.put("price_section_id", "30"); tmp.put("name", "liqiu"); list.add(tmp); tmp = new HashMap<String, String>(); tmp.put("price_section_id", "1"); tmp.put("name", "baoshan"); list.add(tmp); tmp = new HashMap<String, String>(); tmp.put("price_section_id", "3"); tmp.put("name", "yihui"); list.add(tmp); System.out.println(list);
    //比较排序-核心代码 Comparator
    <Map<String, String>> comparator = new Comparator<Map<String, String>>() { public int compare(Map<String, String> s1, Map<String, String> s2) { return new Integer( s1.get("price_section_id").compareTo(s2.get("price_section_id")) ); } }; Collections.sort(list,comparator); System.out.println(list.toString()); } }

    结果:

    [{name=liqiu, price_section_id=30}, {name=baoshan, price_section_id=1}, {name=yihui, price_section_id=3}]
    [{name=baoshan, price_section_id=1}, {name=yihui, price_section_id=3}, {name=liqiu, price_section_id=30}]

    深入:

    1. 查看Collections.sort方法:

        public static <T> void sort(List<T> list, Comparator<? super T> c) {
            Object[] a = list.toArray();
            Arrays.sort(a, (Comparator)c);
            ListIterator i = list.listIterator();
            for (int j=0; j<a.length; j++) {
                i.next();
                i.set(a[j]);
            }
        }

    2. Arrays.sort方法

        public static <T> void sort(T[] a, Comparator<? super T> c) {
            if (LegacyMergeSort.userRequested)
                legacyMergeSort(a, c);
            else
                TimSort.sort(a, c);
        }    

    3. TimSort 是一个归并排序做了大量优化的版本。对归并排序排在已经反向排好序的输入时表现O(n^2)的特点做了特别优化。对已经正向排好序的输入减少回溯。对两种情况混合(一会升序,一会降序)的输入处理比较好。

    链接:http://baike.baidu.com/view/7780831.htm?fr=aladdin

  • 相关阅读:
    SQL如何获取上一条..下一条..首尾记录
    PHP判断浏览器类型的代码
    html命名规范
    使用JavaScript JS 获取label for 标签的值和for值
    PNG透明兼容IE6的几种方法
    冉茂锋同学去上课了
    十一戒,自勉
    语录
    CreateThread最后还是调用的ntdll.dll里面的ZwCreateThread
    InitializeObjectAttributes
  • 原文地址:https://www.cnblogs.com/liqiu/p/4116435.html
Copyright © 2011-2022 走看看