Java集的实现(例如散vs。vs HashTable...),成本是什么选择了错误的一个吗?[关闭]
-
06-07-2019 - |
题
在我的代码,我的默认使用。所有列出,哈希于所有地图。所有集。
从实际的角度来看有多少我失去灵活性,可扩展性、可读性和性能的选择了错误的执行?当它是有意义的花费时间,以决定使用一个,而不是另一个?
我肯定看到了一个非常明确的情况下,用于为什么有人会使用链表,而不是对列表给某些情况下。当不会有人觉得这是重要的,他们使用哈希而不是树形图,或者HashTable?怎么样?
问题:
- 什么是费用的选择不好?
- 任何人都不会有一个灾难的故事关于选择了错误的实施和数据中心的着火?
- 任何良好规则的拇指?
- 是否有任何模糊集的实现你的生活不能没有?
我读通过:
- http://java.sun.com/j2se/1.4.2/docs/api/java/util/TreeMap.html
- http://java.sun.com/j2se/1.4.2/docs/api/java/util/HashMap.html
- Java:。对于清单,哈希于地图,并。对吗? 等等...
我找到了 此 问题是相关的,从理论的观点,但是我更感兴趣的一个真正的世界,在战壕里的答案。
解决方案
这是一个非常一般性的问题,但我扔在一对夫妇的思考.
如果你是编程为导向的接口,然后灵活性不会把一个很大的打击。例如
void foo(List<E> list);
成本的选择不可以看出,在性能的惩罚。例如,选择的链表时直接进入(如在对列表)是什么。
设有一个类似的问题。如果你想要保留排收集不重复,一个SortedSet将是一个明智的选择。.在后者之一,只有排序的整套手动(这是一个呼吁的收藏品。sort())
<EDIT>
作为对 地图, 有很多不同的方式实现的。每个人都有不同的目的。例如,这里 SortedMap, 模SortedSet.然后,那里有 WeakHashMap, 那不工作就像一个哈希,在这个意义上,钥匙都可以通过垃圾的收集器。你可以想象,选择之间的哈希和WeakHashMap不是微不足道的。一如既往,取决于什么是你希望实现他们。
</EDIT>
关于故事,在我前的项目,我们代替。与SortedSet因为业绩受到影响。数据中心没有抓住了火。
我的两个美分。
其他提示
所以只要你遵守良好的OO的实践 根据一个抽象的类型, 什么事?
例如,如果你发现你已经使用了错误的 Map
你只是改变了执行使用,因为所有依赖关系上的 Map
一切正常,因为之前只有不同的性能特点。
我觉得你收到使用哈希,。和对列表作为主要的实现。当你需要一个有序的设置,它是好的要知道TreeSet是可用;当你做递归类的东西,同样,它很高兴有链表,在你的口袋。但程序接口,然后你可以互换的实现出必要的。如果同样的收集需要处理作为(例如)两个链表和对列表,它没什么大不了构建一个从其他。
工作与默认的实现你已经列出。当有效的问题,并且有理由相信一个备用的执行会更好,拔它出和衡量的差异。当你需要的特殊行为(序集合,为实例),使用特殊的课程。
这种方法并没有烧了我的呢。