java map按 key 键值长度排序,map sort by key length

问题描述

HashMap 形式
HashMap< String, Integer >

HashMap<String,Integer> map = new HashMap<String,Integer>();
          map.put("java",1);
          map.put("python",2);
          map.put("c#",3);
          map.put("c",4)
          map.put("R",5)
期望Result:
c,4
R,5
c#,3
java,1
python,2

HashMap< String, String >

HashMap<String,Integer> map = new HashMap<String,Integer>();
          map.put("java","a");
          map.put("python","b");
          map.put("c#","c");
          map.put("c","d")
          map.put("R","e")
期望Result:
c,d
R,e
c#,c
java,a
python,b

按照Map的键值长度排序,如果遇到同等长度,则按字母序排序。

特别注意错误代码展示,分析

import java.util.Comparator;
import java.util.HashMap;
import java.util.Map;
import java.util.TreeMap;

public class Test {
    public static void main(String[] args) {

       HashMap<String,Integer> map = new HashMap<String,Integer>();
          map.put("java",1);
          map.put("python",2);
          map.put("c#",3);
          map.put("c",4)
          map.put("R",5)
      Map<String,Integer> treeMap = new TreeMap<String, Integer>(
                new Comparator<String>() {
                    @Override
                    public int compare(String s1, String s2) {
                        return Integer.compare(s1.length(), s2.length());//keep the first one and remove all key-value which has the same key length with the first one
                    }
                }
        );
        treeMap.putAll(map);
        System.out.println(treeMap);
    }
}

这样写,对应同等长度的key 代码会认为他们是冗余的,从map中remove掉。最后输出结果将仅保留同等长度的一个key,删除其他所有:

输出:
c,4
c#,3
java,1
python,2

可以看到代码将 R,5 删除,他与c,4有着同等的键值长度。

正确实现

import java.util.Comparator;
import java.util.HashMap;
import java.util.Map;
import java.util.TreeMap;

public class Test {
    public static void main(String[] args) {

       HashMap<String,Integer> map = new HashMap<String,Integer>();
          map.put("java",1);
          map.put("python",2);
          map.put("c#",3);
          map.put("c",4)
          map.put("R",5)
          Map<String, Integer> treeMap = new TreeMap<String, Integer>(
    new Comparator<String>() {
        @Override
        public int compare(String s1, String s2) {
            if (s1.length() > s2.length()) {
                return -1;
            } else if (s1.length() < s2.length()) {
                return 1;
            } else {
                return s1.compareTo(s2);//if equal return alphabetical order
            }
        }
});
        treeMap.putAll(map);
        System.out.println(treeMap);
    }
}
输出:
c,4
R,5
c#,3
java,1
python,2

这样可以避免删除有同等key长度的键值对

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值