精华内容
下载资源
问答
  • 利用TreeMap进行排序

    2011-01-14 17:35:06
    java.util.TreeMap 放入其中的value,自动按key进行排序, 默认的排序规则按ascii码排序,如果是key是英文和数字不会有问题,如果中文 则会出现问题,需要自己写排序规则。 比较器需要实现java.text.Collator类,...

    java.util.TreeMap 放入其中的value,自动按key进行排序, 默认的排序规则按ascii码排序,如果是key是英文和数字不会有问题,如果中文

    则会出现问题,需要自己写排序规则。

    比较器需要实现java.text.Collator类,例如:

    package cn.tjopen.mediaman.util;
    
    import java.text.CollationKey;
    import java.text.Collator;
    
    public class CollatorComparator extends Collator {
     private Collator collator = Collator.getInstance();
     private int sort=1;
     @Override
     public int compare(String arg0, String arg1) {
      CollationKey key1 = collator.getCollationKey(arg0);
         CollationKey key2 = collator.getCollationKey(arg1);
         return sort*key1.compareTo(key2);
     }
     /**
      * 设定排序的方向
      * @param i 排序方向(正数:正序;负数:倒序)
      */
     public void setSort(int i){
      if(i>0){
       sort=1;
      }else if(i<0){
       sort=-1;
      }
     }
     @Override
     public CollationKey getCollationKey(String arg0) {
    //   TODO Auto-generated method stub
      return null;
     }
    
     @Override
     public int hashCode() {
      // TODO Auto-generated method stub
      return 0;
     }
    
    }
    

     

    比较器的使用:

    int sort = 1;//>0正序<0倒叙
    
    CollatorComparator comparator = new CollatorComparator();
      comparator.setSort(sort);
      Map map = new TreeMap(comparator);
    
    

     

    然后在把要排序的字段作为key,相应的信息作为对应的value,即可实现排序

    注意:key值不能重复,如果排序字段有重复,则需要进行处理。

    例如:方法一:在向map中存放数据时,先判断要放的key是否已存在,如果存在在当前值后面加一区分标记

    方法二:如果信息中有不可能重复的字段,在排序字段后面加上这个不重复的字段值,把这个组合当做key

    展开全文
  • 原本从了解的资料知道HashMap是不会自动排序TreeMap是可以自动排序的,晚上测试 了一下发现 ![在这里插入图片描述](https://img-blog.csdnimg.cn/20201118215701558.png?x-oss-process=image/watermark,type_ZmFuZ...
    原本从了解的资料知道HashMap是不会自动排序,TreeMap是可以自动排序的,晚上测试 了一下发现
    ![在这里插入图片描述](https://img-blog.csdnimg.cn/20201118215701558.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl81MTU3ODQzOQ==,size_16,color_FFFFFF,t_70#pic_center)
    

    在这里插入图片描述
    在这种情况下HashMap是可以实现排序的,当key只有一个字符的时候是可以完成排序,当key的值变成了多个字符之后
    在这里插入图片描述
    无法产生排序效果。
    所以如果需要排序效果的话,最好还是采用TreeMap
    在这里插入图片描述

    展开全文
  • TreeMap使用红黑树实现,保留有key值顺序性,会自动按照key值排序。 默认是按照key值的升序排序,key值必须实现 Comparator接口。如果希望按找一定规则排序,则需要重新定义compare函数。 如: ...
    Map存储的是key->value的值对,key的值是唯一的,而value的值可以重复。通常使用的是HashMap或TreeMap,如果考虑性能,使用HashMap。TreeMap使用红黑树实现,保留有key值顺序性,会自动按照key值排序。

    默认是按照key值的升序排序,key值必须实现 Comparator接口。如果希望按找一定规则排序,则需要重新定义compare函数。

    如:
       TreeMap hm = new TreeMap<String, String>(new Comparator() { 
    public int compare(Object o1, Object o2) {
    //如果有空值,直接返回0
    if (o1 == null || o2 == null)
    return 0;

    return String.valueOf(o1).compareTo(String.valueOf(o2));
    }
    });


    对于处理有中文排序的问题
    TreeMap hm = new TreeMap<String, String>(new Comparator() { 
    public int compare(Object o1, Object o2) {
    //如果有空值,直接返回0
    if (o1 == null || o2 == null)
    return 0;

    CollationKey ck1 = collator.getCollationKey(String.valueOf(o1));
    CollationKey ck2 = collator.getCollationKey(String.valueOf(o2));
    return ck1.compareTo(ck2);
    }
    });


    备注: CollationKey:CollationKey 表示遵守特定 Collator 对象规则的 String。
    比较两个CollationKey 将返回它们所表示的 String 的相对顺序。使用 CollationKey 来比较 String 通常比使用 Collator.compare 更快。因此,当必须多次比较 String 时 (例如,对一个 String 列表进行排序),使用 CollationKey 会更高效。

    如果想按照value排序或者是对HashMap中的key或value排序则可以如下:

    List<Map.Entry<String,Integer>> list = new ArrayList<Map.Entry<String,Integer>>(m.entrySet());
    Collections.sort(list,new Comparator<Map.Entry<String,Integer>>(){
    public int compare(Map.Entry<String,Integer> o1, Map.Entry<String,Integer> o2){
    return o2.getValue()-o1.getValue();
    }
    });


    获取Map.Entry成为表,然后定义comparator进行自定义的排序。
    展开全文
  • TreeMap自动排序有存入。若放入的key是非String对象,设置comparator对其进行排序。 可在comparator中设置排序逻辑 测试代码:  HashMap sm = new HashMap();  A a3 = new A("1111","a3");  A a

    如果new 一个TreeMap  key为string  。TreeMap自动排序有存入。若放入的key是非String对象,设置comparator对其进行排序。

    可在comparator中设置排序逻辑

    测试代码:    

       HashMap<A,String> sm = new HashMap<A,String>();

            A a3 = new A("1111","a3");
            A a4 = new A("aaa","a4");
            A a1 = new A("2221","a1");
            A a2 = new A("dstg312","a2");
            sm.put(a3,"1");
            sm.put(a4,"1");
            sm.put(a1,"1");
            sm.put(a2,"1");//初始化map
            
            Comparator<A> cc = new TestComparator();//创建Comparator
            
            
            SortedMap sm1 = new TreeMap(cc);//设置Comparator
            
            sm1.putAll(sm);//设置要排序的map
            
            Set<Entry<A,String>> en = sm1.entrySet();//读取数据
            Iterator<Entry<A,String>> it = en.iterator();
            while(it.hasNext()){
                Entry<A,String> ee = it.next();
                System.out.println("before sort:"+ee.getKey().toString()+"--"+ee.getValue());

            }

    测试实体类A:

    public class A {
        
        private String a;
        private String b;
        public A(String a, String b) {
            super();
            this.a = a;
            this.b = b;
        }
        public String getA() {
            return a;
        }
        public void setA(String a) {
            this.a = a;
        }
        public String getB() {
            return b;
        }
        public void setB(String b) {
            this.b = b;
        }

        @Override
        public String toString() {
            return "a:"+a+"---b:"+b;
        }
    }


    TestComparator类:


    public class TestComparator implements Comparator<A> {

        public int compareString(String a,String b){
            char[] aa = a.toCharArray();
            char[] bb = b.toCharArray();
            for(int i=0;i<(aa.length>bb.length?aa.length:bb.length);i++) //比较char
            {
                if(aa[i]>bb[i]){
                return 1;
                }
                if(aa[i]<bb[i]){
                    return -1;
                }
            }
            return 0;
        }


    展开全文
  • // 根据key 值排序后的输出 2、 TreeMap, String> treeMap = new TreeMap, String>(new Comparator(){ public int compare(String a,String b){ return b.compareTo(a); } }); for (String string : ...
  • TreeMap中的Key可以自动排序 详解

    千次阅读 2018-05-14 22:34:24
    /* Set添加元素用的是add,Map添加元素用的是put 如果想自动排序:1.实现Comparable接口 2.单独便捷一个比较器*/import java.util.*;public class fuck15{ public static void main(String[] args){ //Map.Key...
  • 前面介绍了 Map 接口的实现类 LinkedHashMap,LinkedHashMap 存储的元素...而 Map 接口有一个重要的实现类 TreeMapTreeMap 可以实现存储元素的自动排序。01、摘要在集合系列的第一章,咱们了解到,Map 的实现类有 ...
  • Map, String> map1 = new TreeMap, String>(); for (Verdice cc : verdice) { map1.put(cc.getDaytime(), "1"); // list.add(map1); }   转载于:...
  • TreeMap:基于红黑树(Red-Black tree)的 NavigableMap 实现,该映射根据其键的自然顺序(比如integer的大小,String的字典排序)进行排序,或者根据创建映射时提供的 Comparator 进行排序,具体取决于使用的构造方法...
  • //TreeMap自动排序 Map<String, String> params = new TreeMap<String, String>( new Comparator<String>() { public int compare(String obj1, S...
  • 三个Map接口的常见实现类HashMap、LinkedHashMap和TreeMap 1.HashMap 无序存储,遍历之后的顺序并一定是存储顺序 ...自动排序,按照key进行自动排序,使用二叉树储存 下面是他们的代码 1.HashMap public clas
  • HashMap,键值是Integer和Character时会自动排序(不建议使用) Hashtable与HashMap类似 Hashtable HashMap 线程同步 需提供一个外同步 不能存空值,空键 可以存一个空键,空值随便存   TreeMa
  • 底层是红黑树,元素放进去之后会自动根据key排序。 测试代码 测试TreeMap的使用、Comparabe自定义类的自定义排序方式e package cn.hanquan.test; import java.util.Map; import java.util.TreeMap; public class ...
  • 前面介绍了Map接口的实现类LinkedHashMap,LinkedHashMap存储的元素是有序的,可以保持元素的插入顺序,但不能对元素进行自动排序。在一些编程应用场景中,如果在数据的存储过程中,能够自动对数据进行排序,将会极...
  • TreeSet/TreeMap可以对元素按照大小自动排序。 二叉树排序有三种: 前序排序:根左右 中序排序:左根右 后序排序:左右根 TreeSet/TreeMap是采用中序排序。 在【TreeMap】码源有二叉树的节点有5个属性。在【TreeMap...
  • java中如何使用TreeMap进行键值对排序

    千次阅读 2015-02-11 15:51:34
    TreeMap是可以保存键值对的一种方式,它的特殊之处是它可以自动以键进行升序排序。 下面举例说明它的用法。 首先定义一个实体类Person,有name和age属性: [java] view plaincopyprint? ...
  • TreeMap集合

    2021-04-08 23:24:40
    4.TreeSet集合中的元素:无序不可重复,但是可以按照元素的大小顺序自动排序。称为:可排序集合 5.TreeMap集合的遍历方式 第一种方式:先获取所有的key,遍历key的时候,通过key获取value ​ 先把map集合通过map....
  • 需求:某一个类对象放入一个集合时,就按照类对象的参数(或者自定义的功能)自动排序,使用的时候不用另外调用集合的sort函数。可以实现此功能的集合: TreeSet ,TreeMap。原理:这两个集合提供了相应的构造函数:...
  • TreeSet的实现:TreeMap实现:需要注意:1. 当利用comparator比较两个元素相等时,插入的时候会失败。而hashset是发现两个元素相等(即:两个元素的hashcode相同,equals方法比较之后也相等)时,插入失败返回false。...
  • 使用 HashMap 还是 TreeMap

    千次阅读 2019-05-03 23:05:05
    TreeMap默认是按照Key值升序排序的,可指定排序的比较器,主要用于存入元素时对元素进行自动排序。 HashMap大多数情况下有更好的性能,尤其是读数据。在没有排序要求的情况下,使用HashMap。 都是非线程安全。 ...
  • TreeMap简单simple

    2014-10-15 19:29:00
    TreeMap能够按照主键对里面的数据进行排序,基于上篇...要想实现TreeMap自动排序功能,要么主键对象实现Comparator接口,要么用Comparable来构造TreeMap。以下则分别对这两种方式创建TreeMap。 1. 继承Comparable...
  • TreeSet1、TreeSet集合底层实际上是一个TreeMap2、...4、TreeSet集合中的元素:无序不可重复,但是可以按照元素的大小顺序自动排序。称为:可排序集合。public classTreeSetTest02 {public static voidmain(String[]...

空空如也

空空如也

1 2 3 4 5 ... 11
收藏数 204
精华内容 81
关键字:

treemap自动排序