gpt4 book ai didi

java - 我不明白输出这段代码。 ( map )

转载 作者:行者123 更新时间:2023-11-30 05:38:56 24 4
gpt4 key购买 nike

我不明白这个输出。

因为我创建了另外 4 个 key (瓶子 b1、b2、b3、b4)。

4个键还有其他属性。

所以,我认为这段代码打印了 4 个输出。

但是这段代码只打印 3 个输出。

为什么???

package map;

import java.util.Map;
import java.util.TreeMap;

public class TreeMapExample {
public static void main(String[] args) {
Bottle b1 = new Bottle("red", 15);
Bottle b2 = new Bottle("black", 10);
Bottle b3 = new Bottle("white", 20);
Bottle b4 = new Bottle("green", 10);
// Bottle b4 = new Bottle("red", 10);
// Bottle b4 = new Bottle("red", 11);

TreeMap<Bottle, Integer> treeMap = new TreeMap<Bottle, Integer>();
treeMap.put(b1, 10);
treeMap.put(b2, 15);
treeMap.put(b3, 5);
treeMap.put(b4, 20);

for (Map.Entry<Bottle, Integer> entry : treeMap.entrySet()) {
System.out.println(entry.getKey() + " - " + entry.getValue());
}
}
}

class Bottle implements Comparable<Bottle> {
String name;
int size;

Bottle(String name, int size) {
this.name = name;
this.size = size;
}

@Override
public int compareTo(Bottle o) {
return this.size - o.size;
}

@Override
public String toString(){
return name + " bottle";
}
}

如果 Bottle b4 = new Bottle("green", 10);Bottle b4 = new Bottle("red", 10);

结果是

black bottle - 20
red bottle - 10
white bottle - 5

但是如果Bottle b4 = new Bottle("red", 11);

结果是

black bottle - 15
red bottle - 20
red bottle - 10
white bottle - 5

我不明白这个输出...

最佳答案

TreeMap 考虑了您在自定义比较器中使用的键的相等性。因为您的两个瓶子是相等的(因为它们具有相同的尺寸值),所以更换一个。在本例中:绿色被黑色替换。

看看treeMap.put返回了什么:

Returns: the previous value associated with key, or null if there was no mapping for key. (A null return can also indicate that the map previously associated null with key.)

https://docs.oracle.com/javase/8/docs/api/java/util/TreeMap.html#put-K-V-

如果我们输出 treeMap.put(...) 返回的内容,我们会看到我们得到四个 null 并且在最后一种情况下,我们得到 15。因此,用 b4 替换 b2 因为它们是相等的:

System.out.println(treeMap.put(b1, 10));
System.out.println(treeMap.put(b2, 15));
System.out.println(treeMap.put(b3, 5));
System.out.println(treeMap.put(b4, 20));

给出:

null
null
null
15

关于java - 我不明白输出这段代码。 ( map ),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56087347/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com