添加链接
link之家
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接

问题
重写了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 getEntryUsingComparator(key);
    if (key == null)
        throw new NullPointerException();
    @SuppressWarnings("unchecked")
        Comparable<? super K> k = (Comparable<? super K>) key;
    Entry<K,V> p = root;
    while (p != null) {
        int cmp = k.compareTo(p.key);
        if (cmp < 0)
            p = p.left;
        else if (cmp > 0)
            p = p.right;
            return p;
    return null;

方案一:Comparator在相等的时候返回0

Map<String, Object> newTreeMap = new TreeMap<>((o1, o2) -> {
	// 定义匹配的条件
    if(o1.key == o2.key){
    	return 0;
    // 处理其他的比较
    ...
});

方案二:转成HashMap或者LinkedHashMap

Map<String, Object> map = new HashMap<>(newTreeMap);
                    问题重写了TreeMap的Comparator,TreeMap在get的时候通过Comparator比较,如果小于0,往左找,大于0往右找,不等于0的话,最后是会返回null。源码如下:final Entry&lt;K,V&gt; 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&lt;Double&gt; comparator = new Comparator&lt;Double&gt;() { @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: if(e.altKey){ console.log("如果按了 alt 键,进入这里!") } let yourBtn = document.querySelector("***") // 功能按钮 || document.querySelector("******") // 同功能按钮 || document.querySelector("**********") // 同功能按钮 if(yourBtn) yourBtn.click() 放这上面的星号里 keil5出现--- Error: failed to execute ‘C:\Program Files\temp\keil5\ARM\ARMCC\bin\ArmCC‘ 青纸白墨: 我点不开第二个选项怎么办呀 是灰色的 如何给未来的自己写信--小程序版 2201_75574867: 可以给我源码吗 保姆级教学|为网站加上自定义的「快捷键」 weixin_45502833: 博主,这个复制的JS path要放在代码哪里啊。不太懂