【发布时间】:2019-05-11 05:03:35
【问题描述】:
我不明白这个输出。
因为我创建了 4 个其他键(瓶 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
我不明白这个输出...
【问题讨论】:
-
这可能是因为你应该为你的 Bottle 类重写 equals 和 hashcode。
-
但我认为哈希码,等于不需要。因为,Bottle 是(新对象)键。
-
Bottle 是 Key,Integer 值是 Value。我知道地图需要其他钥匙。而且我认为 b1、b2、b3、b4 不是同一个对象。
标签: java dictionary collections