`

TreeMap 排序重写

阅读更多
import java.util.Comparator;
import java.util.Iterator;
import java.util.Map;
import java.util.TreeMap;

public class MapSort
{
    private Map<Object, Number> map;
    private TreeMap<Object, Number> sortedMap;
    private TreeMap<Object, Number> descSortedMap;
    public MapSort(Map<Object, Number> map)
    {
        this.map = map;
        this.sortedMap = sortedMap();
        this.descSortedMap = descSortedMap();
    }
    
    public Object[] getSortedMap()
    {
        return sortedMap.keySet().toArray();
    }
    
    public Object[] getDescSortedMap()
    {
        return descSortedMap.keySet().toArray();
    }

    private TreeMap<Object, Number> sortedMap()
    {
        TreeMap<Object, Number> treeMap = new TreeMap<Object, Number>(new Comparator<Object>(){

            public int compare(Object o1, Object o2)
            {
                Number n1 = map.get(o1);
                Number n2 = map.get(o2);
                if (n2.doubleValue() == n1.doubleValue())
                    return o1.hashCode() - o2.hashCode();
                else 
                    return (int)(n1.doubleValue() - n2.doubleValue());
            }});
        
        Iterator it = map.keySet().iterator();
        while(it.hasNext())
        {
            Object key = it.next();
            Number value = map.get(key);
            treeMap.put(key, value);
        }
        
        return treeMap;
    }
    
    private TreeMap<Object, Number> descSortedMap()
    {
        TreeMap<Object, Number> treeMap = new TreeMap<Object, Number>(new Comparator<Object>(){

            public int compare(Object o1, Object o2)
            {
                Number n1 = map.get(o1);
                Number n2 = map.get(o2);
                if (n2.doubleValue() == n1.doubleValue())
                    return o2.hashCode() - o1.hashCode();
                else
                    return (int)(n2.doubleValue() - n1.doubleValue());
            }});
        
        Iterator it = map.keySet().iterator();
        while(it.hasNext())
        {
            Object key = it.next();
            Number value = map.get(key);
            treeMap.put(key, value);
        }
        
        return treeMap;
    }
}





如何对Map进行按值(value)排序?

/**
     * @param h
     * @return
     * 实现对map按照value升序排序
     */
    @SuppressWarnings("unchecked")
    public static Map.Entry[] getSortedHashtableByValue(Map h) {
        Set set = h.entrySet();
        Map.Entry[] entries = (Map.Entry[]) set.toArray(new Map.Entry[set
                .size()]);
        Arrays.sort(entries, new Comparator() {
            public int compare(Object arg0, Object arg1) {
                Long key1 = Long.valueOf(((Map.Entry) arg0).getValue().toString());
                Long key2 = Long.valueOf(((Map.Entry) arg1).getValue().toString());
                return key1.compareTo(key2);
            }
        });

        return entries;
    }
分享到:
评论

相关推荐

    java 中 TreeMap排序

    a) 对于简单的排序,如数字和英文字母,我们可以创建一个新的`Comparator`,重写`compare()`方法。在这个例子中,比较两个对象(假设它们都是`String`类型)时,使用`String.valueOf(o1).compareTo(String.valueOf...

    TreeMap in Java_java_treemap_

    如果键是自定义对象,需要重写`compareTo()`方法来定义排序规则。另外,可以通过传入自定义的`Comparator`给构造函数,以实现自定义排序。 2. **红黑树**:`TreeMap`的数据结构是红黑树,这保证了它的插入、删除和...

    对于java map类排序

    需要注意的是,如果Map的键是自定义对象而非基本类型或字符串,那么需要重写这些对象的`compareTo`方法来实现自定义的排序逻辑。此外,如果希望根据值进行排序,可以创建一个新的`TreeMap`实例,并提供一个自定义的...

    HashMap集合排序

    这样,我们可以通过 `TreeMap` 自动排序键值对,首先按照速度排序,如果速度相同,则按照型号排序。 首先,我们创建 `Car` 类: ```java public class Car { private String model; private int speed; public...

    JCF(List、Set、Map)学习,实现了<key,value>按value排序噢

    对于`TreeSet`,由于其只能存储单个对象,若要按值排序,我们需要创建一个包含键值对的自定义类,然后重写`compareTo()`方法,使其根据值进行比较。例如: ```java class ValueWrapper implements Comparable...

    HashMap排序

    2. **使用TreeMap或Collections.sort()**:可以使用`TreeMap`或者`Collections.sort()`方法来对键进行排序。这里展示了两种不同的实现方式: - 使用`TreeMap`:创建一个`TreeMap`对象并传入`ByValueComparator`作为...

    HASHMAP排序功能描述

    - 如果对HashMap进行大量的排序操作,考虑使用TreeMap,它默认按照key的自然顺序排序,也可以自定义Comparator。 **5. 结论** HashMap排序并不是HashMap本身的功能,而是通过其他手段实现的。根据实际需求,可以...

    Java Map 按值排序

    如果我们要根据值排序,可以在创建TreeMap时提供一个自定义的比较器,比较器的compare方法根据值进行比较。例如: ```java Map, Integer&gt; map = new HashMap(); // 添加元素... Map, Integer&gt; sortedByValue = new ...

    java学号姓名成绩排序

    - 对成绩进行排序,可以选择使用内置的`Collections.sort()`方法,前提是`Student`类实现了`Comparable`接口,重写`compareTo()`方法,比较依据是成绩。 - 或者,可以使用`Comparator`接口自定义比较逻辑,然后...

    java 按对象属性排序

    `TreeSet`和`TreeMap`是基于红黑树的数据结构,它们会自动根据元素的自然顺序或提供的`Comparator`进行排序。如果你需要一个自动排序的集合,可以考虑使用这两个类。 7. **自定义排序规则**: `Comparator`不仅...

    java字母数字混搭字符串排序[归类].pdf

    java 字符串数字混搭字符串排序的实现方式有很多,除了使用 Comparator 接口外,还可以使用 другие方式,例如使用 TreeMap 或者 TreeSet 等数据结构。不同的实现方式有其优缺,需要根据实际情况选择合适的实现...

    排序比较器的使用

    此外,`Comparator`还可以用于`TreeSet`和`TreeMap`等数据结构,它们在构造时或插入元素时可以接收一个`Comparator`,以保证插入的数据按照指定的顺序排列。 总之,`Comparator`在Android开发中扮演着至关重要的...

    联系人排序功能的实现

    在IT行业中,尤其是在Android或者Java应用开发中,经常会遇到对数据集合进行...在实际项目中,还可以考虑使用更高级的数据结构(如TreeMap)或使用Android提供的`RecyclerView`组件,以优化性能和适应更多的界面布局。

    Java Map 按照Value排序的实现方法

    Comparator接口有一个`compare(T o1, T o2)`方法,我们需重写此方法,使得比较两个Value时能按我们的需求排序。 - 示例代码: ```java Comparator, Integer&gt;&gt; valueComparator = new Comparator, Integer&gt;&gt;() { ...

    java 排序等问题

    例如,如果我们有一个Person类,我们可能希望按照年龄、姓名或者其他自定义规则进行排序,这时就可以创建一个实现了Comparator接口的匿名类或单独类,重写compare()方法来定义排序逻辑。 Comparator接口的典型用法...

    Android应用源码之Android字母排序 类似通讯录字母检索_应用.zip

    为了快速查找,可以使用`TreeMap`,其天然支持按key排序。 4. **适配器(Adapter)** - 自定义一个`ArrayAdapter`,重写`getView()`方法,根据数据生成视图,同时计算每个条目对应的首字母。 - 实现`...

    java竞赛中各种自定义排序模板

    当我们需要根据Map的值进行排序时,例如,基于学生的成绩来排序他们的学号,我们可以使用`TreeMap`,但默认是按键排序。若要按值排序,可以将Map的`Entry`放入一个列表,然后使用`Collections.sort()`和自定义的`...

    浅谈java Collection中的排序问题

    `TreeMap`按key自然排序或自定义Comparator排序,而`LinkedHashMap`则按照插入顺序或访问顺序排序。 ```java Map, User&gt; sortedByKey = new TreeMap(map); Map, String&gt; sortedByValue = new TreeMap(Comparator....

    实现ListView的字母排序和过滤搜索功能(完整实例源码)

    4. **构建索引**:根据数据集生成一个包含所有首字母的索引,可以使用Java的TreeMap数据结构,以首字母为键,对应的条目集合为值,便于快速查找。 **二、过滤搜索** 1. **SearchView**:Android系统提供了...

    MapReduce分布式计算框架-任务4.pdf

    - **Map阶段**:使用`TreeMap`数据结构存储数据,`TreeMap`可以根据键的自然顺序进行排序,或者根据自定义的`Comparator`进行排序。在这里,我们需要在Map阶段存储当前文件中的最大5个数据,所以会用到`TreeMap`的`...

Global site tag (gtag.js) - Google Analytics