2016-08-12 70 views
3

我有一个响应被移动的应用程序。删除哈希表的内容或者只是实例化一个新的哈希表?

侦听器似乎在一次移动中被调用多次,即如果我将应用程序从显示器的一部分拖到另一部分。

当发生这种情况时,我将一些数据存储到Hashtable中。每次我存储数据时,都需要存储到一个空的Hashtable中。

每次删除Hashtable的内容会更好吗?或者我可以实例化一个新的Hashtable(使用相同的变量)?该Hashtable将包含不超过5个键/值对。

后一种方法会消耗太多的内存吗?或者Java垃圾收集器能够快速释放内存吗?

+1

您可能会反思 - 只有在必要时才会进行优化。为什么不选择一个,看看会发生什么? –

+0

GC很快就会清理它,但我不会过多地担心过早的优化;一个更紧迫的问题是,为什么你在'HashMap'或'ConcurrentHashMap'上使用'Hashtable'? – oldrinb

+0

相关:http://stackoverflow.com/questions/10197988/performance-issue-clear-and-reuse-a-收集或扔它,并得到一个新的一个http://stackoverflow.com/questions/18370780/empty-an-arraylist-or-just-create-a-new-one-and-let -the-旧一个待垃圾山口?noredirect = 1&LQ = 1 – Thilo

回答

1

除了选择不变VS可变的地图,你需要做

  • 您是否希望每一个变化是立即可见的HashMap中之间做出选择
  • 或者您可以写信变化事件队列和冲洗他们定期到HashMap,这将确保您的HashMap不会像第一个解决方案那样频繁地写入,并且可能会给您带来性能优势+响应能力(将队列放入比放入HashMap更轻的操作)。

我建议你继续尝试两种方法,配置文件,然后找出答案。

代码的清晰度和可理解性必须得到最高优先级。如果更清晰的方法(这里使用不可变的HashMap)的性能影响不能忍受,那就去做那个。