精华内容
下载资源
问答
  • LinkedHashMap value为float值,如何实现排序
  • LinkedHashMap排序

    万次阅读 2017-06-16 16:17:57
    LinkedHashMap排序问题
    LinkedHashMap<String, Float> map = new LinkedHashMap<>();
    
    //先转成ArrayList集合
    ArrayList<Entry<String, Float>> list = 
            new ArrayList<Map.Entry<String, Float>>(map.entrySet());
    
    //从小到大排序(从大到小将o1与o2交换即可)
    Collections.sort(list, new Comparator<Map.Entry<String, Float>>() {
    
        @Override
        public int compare(Entry<String, Float> o1, Entry<String, Float> o2) {
            return ((o1.getValue() - o2.getValue() == 0) ? 
                    0: (o1.getValue() - o2.getValue() > 0) ? 1: -1);
        }
    
    });
    
    //新建一个LinkedHashMap,把排序后的List放入
    LinkedHashMap<String, Float> map2 = new LinkedHashMap<>();
    for (Map.Entry<String, Float> entry : list) {
        map2.put(entry.getKey(), entry.getValue());
    }
    
    //遍历输出
    for (Map.Entry<String, Float> entry : map2.entrySet()) {
        System.out.println(entry.getKey() + ":" + entry.getValue());
    }
    
    展开全文
  • LinkedHashMap 排序

    千次阅读 2014-07-16 11:50:34
    import java.util.ArrayList; import java.util.Collections; import java.util.Comparator; import java.util....import java.util.LinkedHashMap; import java.util.List; import java.ut
    import  java.util.ArrayList;
    import  java.util.Collections;
    import  java.util.Comparator;
    import  java.util.HashMap;
    import  java.util.LinkedHashMap;
    import  java.util.List;
    import  java.util.Map;
     
    public  class  TestMapSortByValue {
     
         public  static  void  main(String[] args) {
             Map<String, Integer> map =  new  HashMap<String, Integer>();
             map.put( "d" , 4 );
             map.put( "a" , 1 );
             map.put( "c" , 3 );
             map.put( "e" , 5 );
             map.put( "b" , 2 );
             //排序前
             System.out.println( "before sort" );
             for (Map.Entry<String, Integer> entry:map.entrySet()){
                 System.out.println(entry.getKey()+ "->" +entry.getValue());
             }
             System.out.println();
             
             //将map转成list
             List<Map.Entry<String, Integer>> infos =  new  ArrayList<Map.Entry<String, Integer>>(map.entrySet());
             //对list排序,实现新的比较器
             Collections.sort(infos,  new  Comparator<Map.Entry<String, Integer>>(){
                 @Override
                 public  int  compare(Map.Entry<String, Integer> o1, Map.Entry<String, Integer> o2) {
                     return  o1.getValue() - o2.getValue();
                 }
             });
             //申明新的有序 map,根据放入的数序排序
             Map<String, Integer> lhm =  new  LinkedHashMap<String, Integer>();
             //遍历比较过后的map,将结果放到LinkedHashMap
             for (Map.Entry<String, Integer> entry:infos){
                 lhm.put(entry.getKey(), entry.getValue());
             }
             //遍历LinkedHashMap,打印值
             System.out.println( "after sort" );
             for (Map.Entry<String, Integer> entry:lhm.entrySet()){
                 System.out.println(entry.getKey()+ "->" +entry.getValue());
             }
         }
    }
    ?
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    before sort
    d->4
    e->5
    b->2
    c->3
    a->1
     
    after sort
    a->1
    b->2
    c->3
    d->4
    e->5

    展开全文
  • linkedHashmap排序机制

    2021-08-31 22:10:55
    LinkedHashMap = HashMap + 双向链表这个说法,对于我们快速理解LinkedHashMap很有启发性。LinkedHashMap不会去改变HashMap节点的性质,LinkedHashMap所做的,只是建立节点之间的联系,LinkedHashMap的增删改查操作...

    在这里插入图片描述LinkedHashMap = HashMap + 双向链表这个说法,对于我们快速理解LinkedHashMap很有启发性。LinkedHashMap不会去改变HashMap节点的性质,LinkedHashMap所做的,只是建立节点之间的联系,LinkedHashMap的增删改查操作,只是在HashMap的增删改查的基础上,进行head和tail指针的移动。总之一句话:LinkedHashMap的所有操作,都是基于HashMap,对自己的双向链表的操作。有点拗口,OK,再换一种说法大家理解一下:LinkedHashMap对HashMap进行了增强,如何增强呢?就是在HashMap上面套了一个双向链表。LinkedHashMap只操作自己维护的双向链表,对于复用HashMap的部分,LinkedHashMap不会做任何改变。为什么呢?因为LinkedHashMap是后来的功能,java的设计者们必须要保证,不能影响HashMap。为什么呢?其实和我们做项目是一个道理。因为大家生产上都用的是HashMap,你敢随便动老功能吗?
    图片发自简书AppLinkedHashMap定义了accessOrder变量,值为true表示按照访问顺序排序,值为false表示按照插入顺序排序。accessOrder的默认值为false,也就是按照插入顺序排序。final boolean accessOrder;什么是有序?我们这里讨论的有序,指的是插入的顺序。一,按照访问顺序排序按照访问顺序排序,指的是当调用get()方法查询一个元素后,LinkedHashMap会把该元素移到链表的尾部。这里需要注意,最近最少使用算法LRU,Least Recently Used,就是基于LinkedHashMap的按访问顺序排序来实现的。实现思路:LinkedHashMap重写了Map接口的get()方法,get()方法主要做了什么呢?其实就是把当前访问的节点,移到双向链表的尾部。具体细节就是指针的移动,这里不再详细说明,感兴趣的可以查看LinkedHashMap的源代码:先看get()方法,然后调用了afterNodeAccess()方法。二,按照插入顺序排序按照插入顺序排序,指的是根据调用put()方法插入元素的顺序来排序。这个是LinkedHashMap的默认排序方法。按照插入顺序排序的实现,相对来说比较简单,每次调用put()方法插入元素时,都把这个元素放到双向链表的尾部,这样就是按照插入顺序排序。因为双向链表通过节点的head和tail保证有序。思考:HashMap的单向链表有next指针,为什么不能保证有序?答:因为单向链表只是发生hash碰撞时,存储具有多个相同hash值的数据结构。也就是说,只是桶内有序。但是HashMap的table数组是无序的,这个是按照哈希值来定位数组中的位置,并不是按照插入顺序排序的。不过,从这点来看,HashMap也是“有序”的,只不过这里的“有序”不是插入时的顺序。

    展开全文
  • 在看LinkedHashMap源码时,可以发现读取操作的get()方法很有意思。 代码如下 public V get(Object key) { Entry&lt;K,V&gt; e = (Entry&lt;K,V&gt;)getEntry(key); if (e == null) return ...

    在看LinkedHashMap源码时,可以发现读取操作的get()方法很有意思。
    代码如下

        public V get(Object key) {
            Entry<K,V> e = (Entry<K,V>)getEntry(key);
            if (e == null)
                return null;
            e.recordAccess(this);
            return e.value;
        }

    调用了redordAccess()方法,代码如下:

            void recordAccess(HashMap<K,V> m) {
                LinkedHashMap<K,V> lm = (LinkedHashMap<K,V>)m;
                if (lm.accessOrder) {
                    lm.modCount++;
                    remove();
                    addBefore(lm.header);
                }
            }

    判断accessOrder为true,就把当前操作的元素放到链表的第一位。

    排序模式accessOrder,属性时布尔,对于访问操作其值为true,插入操作为false。也就是当get(Object key)时,将最新访问的元素放到双向链表的第一位。
    引出了该哈希映射的迭代顺序就是最后访问其条目的顺序,也就很适合构建LRU缓存

    LRU算法 :LRU(Least recently used,最近最少使用)算法根据数据的历史访问记录来进行淘汰数据,其核心思想是“如果数据最近被访问过,那么将来被访问的几率也更高
    又知道,每次addEntry()后都会调用removeEldestEntry()方法

        void addEntry(int hash, K key, V value, int bucketIndex) {
            super.addEntry(hash, key, value, bucketIndex);
    
            // Remove eldest entry if instructed
            Entry<K,V> eldest = header.after;
            //调用了默认返回false的removeEldestEntry()
            if (removeEldestEntry(eldest)) {
                removeEntryForKey(eldest.key);
            }
        }
    
      protected boolean removeEldestEntry(Map.Entry<K,V> eldest) {
          //默认返回false
            return false;
        }

    只需要稍作修改就可以构建一个有稳定状态的,每次添加新条目都会淘汰最旧条目的映射。

    展开全文
  • 主要介绍了Java使用LinkedHashMap进行分数排序的相关代码,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
  • LinkedHashMap在不同排序方式下的遍历

    千次阅读 2018-09-21 11:05:23
    LinkedHashMap字面上意思为有序集合,有两种排序方式,分别是按输入顺序与读取顺序,可通过以下构造方法来指定其排序方式: public LinkedHashMap(int initialCapacity, float loadFactor, boolean accessOrder)...
  • LinkedHashMap和TreeMap排序实现

    千次阅读 2017-09-25 23:10:46
     Comparator可以对集合对象或者数组进行排序的比较器接口,实现该接口的public compare(T o1,To2)方法即可实现排序,该方法主要是根据第一个参数o1,小于、等于或者大于o2分别返回负整数、0或者正整数。如下: ...
  • 题目:已知一个 HashMap<Integer,User>集合, User 有 name(String)和 age(int)属性。请写一个方法实现对 HashMap 的排序功能,该方法接收 HashMap<Integer,User>为形参,返回类型为 HashMap&l...
  • HashMap:新key的加入或旧key的value的改变会刷新map中key的位置,变化的key总是存储在最前面。 LinkedHashMap:有序的HashMap,key的改变不会...使用LinkedHashMap 有序map, map排序 输入123,56,123,89 输出123,56,89
  • LinkedHashMap对key进行排序

    千次阅读 2019-08-06 13:46:26
    LinkedHashMap按key进行降序排序 public static void main(String[] args) { LinkedHashMap<String,String> map = new LinkedHashMap<String,String>(); map.put("1","aaa"); map.put("3","bbb")....
  • LinkedHashMap

    2020-08-24 01:02:52
    文章目录LinkedHashMap详解基本数据结构遍历顺序按照插入顺序遍历顺序按照访问顺序LinkedHashMap实现LRU LinkedHashMap详解 相信大家都知道,HashMap的...其中双向链表,对元素进行排序,保证按照插入的顺序,访问元素
  • 创建LinkedHashMap debug中还是按照插入的顺序排序 但是到页面上面顺序就是按照key排序 这个不明白为什么会在传输中进行了[[排序
  • 这种方法对于排序存在许多相同元素的情况有些浪费,明显即使值相等,两个元素之间也要比较一下,这在现实中是没有意义的. 典型例子就是学生成绩统计的问题,例如高考中,满分是150,成千上万的学生成绩都在0-150之间,平
  • 先是按照插入顺序排序 这里使用的是LinkedHashMap LinkedHashMap<String, String> breadCrumbmap = getBreadCrumb(id); Iterator it = breadCrumbmap.entrySet().iterator(); while (it.hasNext()) { Map....
  •  TreeMap:能够把它保存的记录根据键(key)排序,默认是按升序排序,也可以指定排序的比较器,该映射根据其键的自然顺序进行排序,或者根据创建映射时提供的 Comparator 进行排序,具体取决于使用的构造方法。...
  • import java.util.Hashtable; import java.util.Iterator;...import java.util.LinkedHashMap; import java.util.Map; import java.util.Set; import java.util.TreeMap; public class list { public sta...
  • java集合框架非常好的封装了对数据基本处理的底层实现细节,可以直接调用API完成对数据的基本的操作,它们之间的关系就不累述了,这里主要想谈下LinkedHashMap与TreeMap的排序问题。 LinkedHashMap的底层是哈希实现...
  • 今天做统计时需要对X轴的地区按照地区代码(areaCode)进行排序,由于在构建XMLData使用的map来...map是键值对的集合接口,它的实现类主要包括:HashMap,TreeMap,Hashtable以及LinkedHashMap等。其中这四者的区别...
  • LinkedHashMap源码分析  LinkedLinkedHashMap继承自HashMap,与HashMap不同的是,...  LinkedHashMap具有两种排序方式:按照插入顺序排序和按照最近使用顺序排序。而最近使用顺序正好是LRU算法实...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 34,754
精华内容 13,901
关键字:

linkedhashmap排序方法