Java pojo - 迭代新数据集合后回收缓存的哈希表值

标签 java arrays hashtable enumeration pojo

所以,是的,我只是想看看是否有一种更优雅的方式来完成我下面要做的事情(请记住,我想要 POJO(普通旧 Java 对象)相关的答案,因为这个问题与 J2ME 相关,因此没有泛型和现代数据结构仅在 Java 1.5 及更高版本中找到):

假设我有一个对象 MyImage,它只是一个简单的 bean 对象,它填充了来自对我的服务器的网络调用的数据。它包含的只是与我的应用程序相关的所述图像的元数据,更重要的是,它包含一个唯一标识符,用于构造 URL,以便从我的服务器获取该对象的图像。当我向这些对象发出请求时,我经常会收到一组新的对象,其中一些与以前的请求相同。

现在,即使我能够下载图像,问题也出现在如何缓存图像数据,当我收到一组新的 MyImage 对象时,我将它们与我的缓存交叉引用并只保留该 MyImage 对象的图像(如果已下载)。换句话说,当我将下载的图像保存到哈希表缓存时,我使用构造的 URL (MY_IMAGE_SERVER+myImageUniqueId) 来键入图像数据。当我获得一组新的 MyImage 对象时,当前我执行以下操作:

 Hashtable imgs = getImages();

 //If we have cached images, we should see which ones to carry over.
 if(imgs.size() > 0){       
    Hashtable newImgs = new Hashtable();
    for(int i = 0; i < myImages.length; i++){
        MyImage mi = myImages[i];
        if(mi != null && mi.hasImage()){
            //Check if we have the MD5 URL
            if(imgs.containsKey(IMG_URL_PATH + mi.getUniqueId())){
                //Place in new hashtable
                newImgs.put(IMG_URL_PATH + mi.getUniqueId(), imgs.get(IMG_URL_PATH + mi.getUniqueId()));
            }
        }
    }
   _bannerImgs = newImgs;
 }

我想知道这听起来是否合法,或者可以以更好更有效的方式完成吗?

最佳答案

跟进

根据注释中代码的假定用途(如下),您的做法似乎是合理的,但您可以进行一些小的优化。将代码的相关部分更改为:

    // Check if we have the image in our cache
    String key = IMG_URL_PATH + mi.getUniqueId();
    Object image = imgs.get(key);
    if (image != null) {
        // Carry over to new cache
        newImgs.put(key, image);
    }

注意:

  1. 创建/使用局部变量可以避免创建 key 字符串 3 次。
  2. 使用 get 而不是 contains 可以消除一次哈希表查找。

但是,这是否会对系统性能产生显着影响是值得怀疑的……除非 getUniqueId() 方法做了一些愚蠢的事情,比如每次调用它时计算 MD5 和。 (显然事实并非如此。)

无论性能如何,我都会进行此更改,因为它使代码更易于阅读......我认为。

关于Java pojo - 迭代新数据集合后回收缓存的哈希表值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4928061/

相关文章:

hashtable - 如何创建高效的静态哈希表?

java - 确定 char 值是否在字符范围内

java - 使用 JPA 坚持时覆盖的字段

java - 将数组中的元素循环移动 n

javascript - 这个错误的解决办法是什么?

c++ - boost::unordered_multimap 是否调整大小

algorithm - 文件中单词出现的次数 - 复杂性?

java - Spring单元测试是如何通过基于注解的实现来完成的

java - 不以单词开头、不包含另一个单词但以第三个单词结尾的字符串的正则表达式

javascript - 通过Jquery输出JSON编码的数组