我应该使用嵌套类来封装映射值吗
Should I use a nested class to encapsulate map values?
我有一个带有映射的类(例如hashmap)。映射值包含不同的元素,这些元素可能具有不同的类型。我的问题是,如果使用相同密钥的不同映射,是否更好地实现;或者使用嵌套类来封装所有元素。
带有嵌套类的伪代码示例。
public class MyMap<T> {
private class Element{
int nElementA;
int nElementB;
double dbElementC;
}
private Map<T,Element> map = new HashMap<T,Element>();
public int getElementA(T key) {return map.get(key).nElementA;}
public int getElementB(T key) {return map.get(key).nElementB;}
public double getElementC(T key) {return map.get(key).nElementC;}
}
具有多个映射的伪代码示例。
public class MyMap<T> {
private Map<T,Integer> mapA = new HashMap<T,Integer>();
private Map<T,Integer> mapB = new HashMap<T,Integer>();
private Map<T,Double> mapC = new HashMap<T,Double>();
public int getElementA(T key) {return mapA.get(key);}
public int getElementB(T key) {return mapB.get(key);}
public double getElementC(T key) {return mapC.get(key);}
}
我认为嵌套类(尤其是私有类)可能会对未来的代码维护产生负面影响。但是,如果使用多个具有相同键的贴图,我会觉得这是在浪费资源。我还有其他办法可以重复使用地图键吗?
当问题出现时,我正在用Java进行编码,但我对C++的解决方案也很感兴趣。
主要区别不是获取元素,而是放置它们。如果元素彼此相关,例如Name
、Age
和Sex
,则封装更好。
然而,如果它们完全不同——我认为不是——你可以使用不同的地图。
我的建议是不要让这门课是私人的。单线
map.put(Integer, new Element("John", 51, "Male"));
比好
map1.put(Integer, "John");
map2.put(Integer, 51);
map3.put(Integer, "Male");
这是一个设计决策,只有在三个元素可以封装在一个类下的情况下才使用嵌套类解决方案。在设计类时要考虑"高内聚性"
相关文章:
- 删除一个线程上有数百万个字符串的大型哈希映射会影响另一个线程的性能
- C++映射:具有自定义类的运算符[]不起作用(总是返回0)
- 为什么在没有显式默认构造函数的情况下,将另一个结构封装在联合中作为成员的结构不能编译
- 将函数类成员映射到类本身内部
- 如何在 C# 中映射双 C 结构指针?
- 如何在C++中使用结构生成映射
- 使用std::函数映射对象方法
- 如何加载(或映射)文件部分的最大大小,但适合在Windows上的RAM
- C++映射分割错误(核心转储)
- 内联映射初始化的动态atexit析构函数崩溃
- 使用"std::unordereded_map"映射到"std::list"对象
- 如何从多映射中删除特定的重复项
- 在未初始化映射的情况下,将值插入到映射的映射中
- QT通过C++添加映射QML项目
- 在c++中访问int到类对象的映射时出错
- 在C++中搜索嵌套多映射值
- 错误处理.将系统错误代码映射到泛型
- 处理对存储在私有映射中的值的封装访问的标准方法,而不破坏C++中的抽象
- 如何在不违反封装的情况下合法访问和修改私有字段矢量和映射
- 我应该使用嵌套类来封装映射值吗