zoukankan      html  css  js  c++  java
  • java排序接口

    算法我不懂,所以直接用现成的东西比较容易。

    java api里面实现的排序接口有Collection.sort和TreeMap,sort原理是归并排序,treeMap是红黑树排序。

    package com.study.collection;
    
    
    import java.util.*;
    
    /**
     * Created by DELL on 2016-5-12.
     */
    public class Sort {
    
        /**
         * treeMap排序
         */
        public static void treeMapTest(){
            /**
             * treeMap排序,排序原理是红黑树排序
             * 如果没有指定排序器,默认按照key的string的升序排列,
             * string会先转换成char,如果是中文对转换成中文的unicode编码,把编码的升序排列
             * 建议最好指定排序器,否则有中文时会有问题
             */
            Map<String,String> treeMap = new TreeMap<String,String>(new CollatorComparator());
            treeMap.put("zbc","zbc");
            treeMap.put("你好","你好");
            treeMap.put("111","111");
            treeMap.put("北京","北京");
            treeMap.put("厦门","厦门");
            treeMap.put("碑海","碑海");
            System.out.println(treeMap);
        }
    
        /**
         *Collection排序,排序原理归并排序
         */
        public static void ListStortTest(){
            List<Object> list = new ArrayList<Object>();
            list.add("123");
            list.add("132");
            list.add("abc");
            list.add("acc");
            list.add("碑海");
            list.add("厦门");
            list.add("北京");
            //排序时如果list的元素没有实现Comparable接口,则必须传入排序器
            Collections.sort(list,new CollatorComparator());
            System.out.println(list);
            Collections.reverse(list);
            System.out.println("逆序"+list);
        }
    
        /**
         * 实现Comparable接口排序
         *Collection排序,排序原理归并排序
         */
        public static void listSortBeanTest(){
            List<SortBean> list = new ArrayList<SortBean>();
            list.add(new SortBean("123"));
            list.add(new SortBean("132"));
            list.add(new SortBean("abc"));
            list.add(new SortBean("acc"));
            list.add(new SortBean("碑海"));
            list.add(new SortBean("厦门"));
            list.add(new SortBean("北京"));
            //排序元素list的元素没有实现Comparable接口,如果传入排序器,则bean的Comparable接口无效
            Collections.sort(list/*,new SortBeanComparator()*/);
            System.out.println(list);
        }
        public static void main(String[] args){
            //Sort.treeMapTest();
           // Sort.ListStortTest();
            Sort.listSortBeanTest();
        }
    }
    
    package com.study.collection;
    
    import java.text.CollationKey;
    import java.text.Collator;
    import java.util.Comparator;
    import java.util.Locale;
    
    /**
     * 排序器
     */
    public class CollatorComparator implements Comparator<Object> {
            //本地化语言
            Collator collator = Collator.getInstance(Locale.SIMPLIFIED_CHINESE);
    
        /**
         * 重写这个方法,使用简体中文排序
         * @param el1
         * @param el2
         * @return
         */
            public int compare(Object el1,Object el2){
                CollationKey key1 = collator.getCollationKey(el1.toString());
                CollationKey key2 = collator.getCollationKey(el2.toString());
                return key1.compareTo(key2);
            }
        }
    
    package com.study.collection;
    
    import java.text.Collator;
    import java.util.Comparator;
    import java.util.Locale;
    
    /**
     * Created by DELL on 2016-5-12.
     */
    public class SortBean implements Comparable<SortBean>{
        private String content;
        Collator collator = Collator.getInstance(Locale.SIMPLIFIED_CHINESE);
        public SortBean(String content){
            this.content = content;
        }
    
        public String getContent() {
            return content;
        }
    
        public void setContent(String content) {
            this.content = content;
        }
    
    
    
        @Override
        public int compareTo(SortBean o) {
            return collator.compare(this.getContent(),o.getContent());
        }
    
    
    
        @Override
        public String toString() {
            return this.content;
        }
    }
    

      

  • 相关阅读:
    html5 laboratory
    Lind.DDD.LindAspects方法拦截的介绍
    MongoDB学习笔记~对集合属性的操作
    MongoDB学习笔记~数据模型属性为集合时应该为它初始化
    异步与并行~List<T>是线程安全的吗?
    基础才是重中之重~Emit动态构建方法(参数和返回值)
    XML和DTD的简单介绍和入门
    一些常用的Intent及intent-filter的信息
    最新县及县以上行政区划代码(截止2013年1月18日) 全国省市县数据库 之省市数据
    CRC32 vs Java.HashCode
  • 原文地址:https://www.cnblogs.com/yinchuanqi/p/5512163.html
Copyright © 2011-2022 走看看