我有一个容器,里面有元素地图。
class MyContainer{
.....
Map<String,MyElement> elements = new ...
...
}
每个元素都具有name属性。映射中的键是元素的名称。即插入方法如下:
void addElement(MyElement elem){
elements.put(elem.getName,elem);
}
我需要使用地图数据结构,因为我有许多基于元素名称的读取操作。
问题是,我需要支持修改元素的名称。更改元素名称必须在映射中派生更改。(用新键插入元素,否则我将找不到该元素)
我想了两种选择:
选项1意味着我必须维护从每个元素到容器的引用。(程序的这一部分应该保持较低的内存占用)。
你说呢?你觉得还有更好的选择吗?
发布于 2009-05-13 03:32:46
我将对元素的setName方法发出属性更改通知,并在侦听该通知的容器对象中处理它。
发布于 2009-05-13 03:35:00
首先,请注意,如果MyElement
可以在没有MyContainer
的上下文中使用,那么选项1就不存在了。
MyContainer
与MyElement
有明显的关系,因为它的代码通过映射引用MyElement
实例。相反,情况并非如此:MyElement
中的代码不需要引用MyContainer
。所以备选方案2更好。
也许,您可以选择第三个混合选项:
MyElement
有一个只更改自己名称的rename
方法,MyContainer
有一个rename
方法,它调用MyElement.rename
并将映射中的对象移动到新的键.。
发布于 2009-05-13 03:44:48
如果元素仅在此容器中使用。
将重命名操作放在容器上。
将元素上的重命名方法设置为私有,这样另一个程序员就不会意外地更改元素而忘记更新容器。
https://stackoverflow.com/questions/857352
复制相似问题