Map<String, Object> map = new HashMap<>(newTreeMap);
问题重写了TreeMap的Comparator,TreeMap在get的时候通过Comparator比较,如果小于0,往左找,大于0往右找,不等于0的话,最后是会返回null。源码如下:final Entry<K,V> getEntry(Object key) { // Offload comparator-based version for sake of performance if (comparator != null) return getEntry
public class Testing {
public static void main(String[] args) {
HashMap<String, Double> map = new HashMap<>();
ValueComparator vc = new ValueComparator(map);
TreeMap<String, Doub...
import java.util.Map;
public class MapValueComparator<T extends Comparable<T>> implements Comparator<String> {
private Map<String, T> map = n...
之前用treeMap进行排序,然后for循环keySet,get(Key)获取到的值是null,后来找到一下方法测了一下,只有没有注释的那个方法是可以获取到值得
public class Test
* @param args
public static void main(String[] args)
Map> items = new Tr
treeMap-get返回null,因为比较器出问题
以上会get到null值,究其原因,可以从get方法源码中找到答案。TreeMap集合中实现Map集合的get代码如下:
public V get(Object key) {
Entry<K,V> p = getEntry(key);
return (p==null ? null : p.value);
再继续往下看 getEntry(key)方法:
final Entry<K,V> getEntry(Obj
TreeMap自定义compare后get永远返回null的问题
今天有一个需求,需要根据map中的value进行排序,首先肯定就想到了TreeMap,于是实现了一个Comparator,代码如下:
class ValueComparator implements Comparator<Character> {
Map<Character, Integer> base;
public ValueComparator(Map<
map是键值对的集合接口,它的实现类主要包括:HashMap,TreeMap,Hashtable以及LinkedHashMap等。其中这四者的区别如下(简单介绍):
HashMap:我们最常用的Map,它根据key的HashCode 值来存储数据,根据key可以直接获取它的Value,同时它具有很快的访问速度。HashMap最多只允许一条记录的key值为Null(多条会覆盖);允许多条记录的Val...
今天想到一个问题,HashMap中键值都可以为null,ConcurrentHashMap,HashTable中键值不可以为null,
以上参考:https://blog.csdn.net/gagewang1/article/details/54971965
那么TreeMap呢?
我们一起来看一下吧。
1. 首先, 先分析简单的, value是否能为null?
public ...
最近再做一个需求,kv的数据格式,要求对 k进行倒序遍历,于是想到了TreeMap,因为 TreeMap 默认升序排列,因此需要自定义一个Comparator,代码如下:
public static Comparator<Double> comparator = new Comparator<Double>() {
@Override
public int c...
除了在key所对应的类中实现Comparable接口并重写compareTo方法外,还可以使用Comparator接口来对key进行排序。具体实现方法是在创建TreeMap时,传入一个实现了Comparator接口的对象,该对象重写compare方法来实现自定义的比较方法。例如:
public class MyClass {
private String myKey;
private int myValue;
public MyClass(String key, int value) {
this.myKey = key;
this.myValue = value;
// getters and setters
// 自定义比较器,根据myKey的长度进行排序
class MyComparator implements Comparator<String> {
@Override
public int compare(String str1, String str2) {
return str1.length() - str2.length();
// 使用自定义比较器创建TreeMap
TreeMap<String, MyClass> myTreeMap = new TreeMap<>(new MyComparator());
// 插入数据
myTreeMap.put("abc", new MyClass("abc", 1));
myTreeMap.put("defg", new MyClass("defg", 2));
myTreeMap.put("hijkl", new MyClass("hijkl", 3));
// 遍历输出
for (Map.Entry<String, MyClass> entry : myTreeMap.entrySet()) {
System.out.println(entry.getKey() + ":" + entry.getValue().getMyValue());
在上面的示例中,我们创建了一个实现了Comparator接口的MyComparator类,并在创建TreeMap时将其传入。在MyComparator类中,我们重写了compare方法,根据myKey的长度进行排序。然后我们插入了三个MyClass对象,根据MyComparator的定义,它们会按照myKey的长度从小到大进行排序。最后我们遍历输出了TreeMap中的数据。
豆小匠Coding:
keil5出现--- Error: failed to execute ‘C:\Program Files\temp\keil5\ARM\ARMCC\bin\ArmCC‘
青纸白墨:
如何给未来的自己写信--小程序版
2201_75574867:
保姆级教学|为网站加上自定义的「快捷键」
weixin_45502833: