Eth*_*man 6 java collections hashmap
在我的代码中,我默认使用ArrayList表示所有列表,HashMap表示所有映射,HashSet表示所有集合.
从实际角度来看,通过选择错误的实现,我在灵活性,可伸缩性,可读性和性能方面失去了多少?什么时候花时间决定使用一个而不是另一个?
我当然看到一个非常明确的案例,说明为什么有人会在某些情况下使用LinkedList而不是ArrayList.什么时候有人认为它是关键的,他们使用的是HashMap而不是TreeMap或HashTable?套装怎么样?
问题:
我读过:
我从理论的角度发现这个问题是有关系的,但我对现实世界更感兴趣,在战壕里回答.
这是一个非常普遍的问题,但我会提出几个问题.
如果您是面向接口的编程,那么灵活性不会受到重创.例如
void foo(List<E> list);
Run Code Online (Sandbox Code Playgroud)
选择不佳的成本可以从绩效惩罚中看出来.例如,当您正在寻找直接访问时(如在ArrayList中),选择LinkedList.
集合有一个类似的问题.如果你想保持排序的集合没有重复,那么SortedSet将是一个比HashSet更明智的选择.在后者中,您必须手动对整个Set进行排序(这是对Collections.sort()的调用)
<EDIT>
至于地图,有很多不同的实现.每个人都有不同的目的.例如,SortedMap,与SortedSet类似.然后,WeakHashMap不像HashMap那样工作,因为垃圾收集器可以删除密钥.可以想象,HashMap和WeakHashMap之间的选择并不简单.一如既往,取决于您希望与他们一起实施的内容.
</EDIT>
关于故事,在我当前的项目中,我们用SortedSet替换了HashSet,因为性能受到了影响.DataCenter虽然没有起火.
我的两分钱.