- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
请随时指正。
场景构建需要时间排序的市场数据缓存(即按添加元素的时间排序)。缓存会有很多更新。
逻辑表明列表是一个合乎逻辑的选择,因为索引是免费且容易执行的事情,例如 getOldestElem list.get(0);二分查找等
这个缓存将被多个线程使用,显然读取和更新指向 CopyOnWriteArrayList 的缓存。 (Javadoc表示这不适合大尺寸和频繁更新)
我正在寻找替代方案或更好的主意?
最佳答案
如果现有记录很少(或从不)更新,那么“频繁更新”就是频繁添加,您可以使用时间排序通过分离新旧元素来优化数据结构。
例如,您可以将缓存分段为多个 CopyOnWriteArrayList
对象,每个对象包含不超过固定数量的元素,并且每个分段包含数据的时间子范围。频繁添加会增加最后一个段,直到达到最大大小,此时您将为后续更新附加一个新段。通过保持最大段大小足够小,您可以避免 CopyOnWriteArrayList
的性能问题。您应该将实现细节隐藏在您自己的 List
类中。
编辑:移除旧元素同样只会改变一个片段:最旧的片段。
关于java - 用于频繁更新的 CopyOnwriteArrayList 替代方案,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7646326/
我有一个包含值的字符串数组(duh...)。 有没有一种简单的方法可以获取出现次数最多的条目?有点像 values[37].getMostOften(); 干杯:) 最佳答案 您可以使用GroupBy
我目前正在将一款用 C#(适用于 Windows Phone)开发的游戏移植到 Java (Android)。 我们在 Java 版本中遇到了内存问题,在分析之后,似乎是由于内存中的大量 String
对于播放音频文件的 iPhone 应用程序,我正在开发一个系统来跟踪用户在他们听过的任何一集中的进度(例如,他们听 file1 的前 4:35,然后开始另一个文件,然后返回到文件 1,它从 4:35
如果您按下 UIbutton 显示 UITextView,将请求代码 Ì 再次按下 UIbutton 再次显示 UITextView :/ 最佳答案 .h 文件中只有一个 int 变量,如下所示..
我在 Application_End 上处理的项目中使用临时数据库: protected void Application_End() { if (_db != null) _db.Dispo
我是一名优秀的程序员,十分优秀!