首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何修改map元素键

如何修改map元素键
EN

Stack Overflow用户
提问于 2009-05-13 11:09:41
回答 4查看 950关注 0票数 1

我有一个容器,里面有元素地图。

代码语言:javascript
运行
复制
class MyContainer{
.....
Map<String,MyElement> elements = new ...
...
}

每个元素都具有name属性。映射中的键是元素的名称。即插入方法如下:

代码语言:javascript
运行
复制
void addElement(MyElement elem){
    elements.put(elem.getName,elem);
 } 

我需要使用地图数据结构,因为我有许多基于元素名称的读取操作。

问题是,我需要支持修改元素的名称。更改元素名称必须在映射中派生更改。(用新键插入元素,否则我将找不到该元素)

我想了两种选择:

  1. 将setName方法添加到将更新其名称更改的容器的MyElement类中。
  2. 不向MyElement类添加setName方法,而是向容器中添加重命名元素方法,容器将负责更新映射中的元素名称和键。

选项1意味着我必须维护从每个元素到容器的引用。(程序的这一部分应该保持较低的内存占用)。

你说呢?你觉得还有更好的选择吗?

EN

回答 4

Stack Overflow用户

发布于 2009-05-13 11:32:46

我将对元素的setName方法发出属性更改通知,并在侦听该通知的容器对象中处理它。

票数 1
EN

Stack Overflow用户

发布于 2009-05-13 11:35:00

首先,请注意,如果MyElement可以在没有MyContainer的上下文中使用,那么选项1就不存在了。

MyContainerMyElement有明显的关系,因为它的代码通过映射引用MyElement实例。相反,情况并非如此:MyElement中的代码不需要引用MyContainer。所以备选方案2更好。

也许,您可以选择第三个混合选项:

  • MyElement有一个只更改自己名称的rename方法,MyContainer有一个rename方法,它调用MyElement.rename并将映射中的对象移动到新的键.

票数 1
EN

Stack Overflow用户

发布于 2009-05-13 11:44:48

如果元素仅在此容器中使用。

将重命名操作放在容器上。

将元素上的重命名方法设置为私有,这样另一个程序员就不会意外地更改元素而忘记更新容器。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/857352

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档