Java 对象如何从HashMap获取其密钥?
假设我有一个用HashMap定义的棋盘Java 对象如何从HashMap获取其密钥?,java,hashmap,key,containment,Java,Hashmap,Key,Containment,假设我有一个用HashMap定义的棋盘 HashMap <Position,Field> chessboard = new HashMap <Position,Field>(); 当我试图为字段对象创建一个类时,我遇到了一个问题:字段应该包含一个位置,因为它是由它定义的。前 class Field { Position pos; int color; void draw(){ // draw Field using pos } } 但是Posi
HashMap <Position,Field> chessboard = new HashMap <Position,Field>();
当我试图为字段
对象创建一个类时,我遇到了一个问题:字段
应该包含一个位置,因为它是由它定义的。前
class Field {
Position pos;
int color;
void draw(){
// draw Field using pos
}
}
但是Position对象将用于HashMap。
如何避免这种冗余?成本实际上并不是您所想的:您只持有一个指向内存中相同位置对象的引用(在大多数系统中为四个字节)。开销最小;甚至不用担心它。只需将其从字段中删除即可。您可以从Map
访问它。您可以将相同的位置
对象用于字段
对象和哈希映射
中的键,除非在Position
上覆盖equals
和hashCode
,否则HashMap将无法按预期工作。当对象的键是该对象值的一部分时,不应使用映射,而应使用集合。@DavidSchwartz:为什么?通过ISBN或用户ID或其他方式快速获取书籍是非常有用的,也是一种常见的情况。缓存的整个概念就是基于这个原理。
class Field {
Position pos;
int color;
void draw(){
// draw Field using pos
}
}