ええ、私は以下でやろうとしていることを行うためのよりエレガントな方法があるかどうかを確認しようとしています (この問題はJ2ME に関連しているため、Java 1.5 以降でしか見られない Generics や最新のデータ構造はありません):
サーバーへのネットワーク呼び出しからデータが入力される単純な Bean オブジェクトである MyImage オブジェクトがあるとします。含まれているのは、アプリに関連する画像に関するメタデータだけです。さらに重要なのは、そのオブジェクトのサーバーから画像を取得するために URL を構築するために使用される一意の識別子が含まれていることです。それらのオブジェクトを要求すると、それらのオブジェクトの新しいセットを頻繁に受け取ります。そのうちのいくつかは以前の要求と同じです。
ここで、画像をダウンロードできたとしても、新しい MyImage オブジェクトのセットを受け取ったときにそれらをキャッシュに対して相互参照し、画像のみを保持するように画像データをキャッシュする方法に問題が生じます。その MyImage オブジェクトが既にダウンロードされている場合。つまり、ダウンロードした画像を Hashtable キャッシュに保存するときに、構築された 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;
}
これは正当に聞こえるのか、それともより効率的な方法で実行できるのか疑問に思っています。