在我的项目中,这是一种tcp服务器,我需要跟踪在全局范围内使用的很多对象。我沉迷于哈希表,目前我在我的项目中使用了10个哈希表,它将存储不同类型的对象。
我的问题是,这好吗?我知道它是一个非常庞大的数据结构但它使我的工作变得非常容易,而不是去寻找其他替代方案。例如,我有许多文本框,我需要跟踪。所以我把它们全部放在一个哈希表中并按照我喜欢的方式使用它们。
在处理大型多线程应用程序时,这种方法是否是一种可接受且正常的编程方法。
答案 0 :(得分:7)
从您的示例中不清楚,但听起来好像您正在使用全局哈希映射从程序中的任何位置访问您需要的对象(例如界面中的文本框)。
a)这样的全局访问不是好的做法,对于界面对象更是如此。那些应该只能从前端模块访问,你的TCP服务器后端不会关心那些。
b)在“功能组”中排列对象的正确方法是使用适当的类,而不是5-10个哈希映射。为什么,在实践中?考虑这两种方法(在pythonlike pseduo-code中):
# Interface is a hash-map of interface objects, like text-boxes. 'status' is the key
# in the map for one of those.
Interface['status'].setText("New status!")
# vs:
# Interface is a proper object with its own class, that handles the interface. It has
# all our text-boxes "inside" of it.
Interface.updateStatus("New status!")
现在,假设您改变主意并希望将状态表示为绘图,而不是文本框。使用第二种方法很简单:您只需相应地调整GUI,并更改updateStatus方法的行为方式!
使用第一种方法,你现在对一个不再存在的文本框的hahsmap访问一团糟,遍布你的代码。
这是一种比通常的哈希映射或全局对象更普遍的做法 - 它是关于使用具有明确定义的接口的对象,并且可以在内部进行更改而不会影响程序的其余部分。
答案 1 :(得分:1)
使用哈希表的最大好处是可以存储任何类型的数据。内部HashTable使用字典类型。
如果您在散列表中存储的所有数据都是相同类型,我建议您使用Generic类型。
字典< int,string>或偶数列表<,>输入以获得更好的性能。
答案 2 :(得分:0)
只要你的内存消耗低,我就没有看到任何问题。之后,您应该将哈希表迁移到磁盘。要么使用完整的关系数据库,要么只使用其中一个键值存储。你的选择。