hashMap集合排序、对null键的处理

本文探讨了如何对HashMap进行排序,方法是将其转化为List集合后再进行排序,并将排序后的元素放入LinkedMap中。同时,文章还涉及了HashMap中对null键的处理,包括使用putForNullKey的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


hashMap是无法排序的,那怎么对其排序?

1、思路
  • 只有转化为list 集合,对list进行排序
  • 对排完序的list 集合遍历装进有序的LinkedMap 中,完成排序;
  • hashMap的排序、依据年龄倒序
package com.baidu;
import com.baidu.pojo.User;
import java.util.*;
/**
 * @auther SyntacticSugar
 * @data 2018/12/7 0007上午 10:04
 */
public class HashMapTest {

    public static void main(String[] args) {

        HashMap<Integer, User> hashMap = new HashMap<Integer, User>();
        hashMap.put(1,new User("张三1",25));
        hashMap.put(2,new User("张三2",26));
        hashMap.put(3,new User("张三3",16));
        hashMap.put(4,new User("张三4",20));
        //获取entries、将其转化为list
        Set<Map.Entry<Integer, User>> entries = hashMap.entrySet();
        ArrayList<Map.Entry<Integer, User>> list = new ArrayList<Map.Entry<Integer, User>>(entries);
        // 使用工具类Collections   对list 遍历排序
        Collections.sort(list, new Comparator<Map.Entry<Integer, User>>() {
            public int compare(Map.Entry<Integer, User> o1, Map.Entry<Integer, User> o2) {
                int i = o2.getValue().getAge() - o1.getValue().getAge();
                return i;
            }
        });
        //创建linkedHashMap填充元素、 遍历查看效果
        LinkedHashMap<Integer, User> map = new LinkedHashMap<Integer, User>();
        for (Map.Entry<Integer, User> userEntry : list) {
            map.put(userEntry.getKey(), userEntry.getValue());
        }
        //
        System.out.println(map);
    }
}

3

19.01.08更新

hashmap 对空值null的处理
putForNullKey 的方法、

if (key == null)  
    return putForNullKey(value);  
//那就看看这个putForNullKey是怎么处理的吧。  
private V putForNullKey(V value) {  
    for (Entry<K,V> e = table[0]; e != null; e = e.next) {  
        if (e.key == null) {  
            V oldValue = e.value;  
            e.value = value;  
            e.recordAccess(this);  
            return oldValue;  
        }  
    }  
    modCount++;  
    addEntry(0, null, value, 0);  
    return null;  
}  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值