关于hashtable

prqin 2006-03-30 11:24:45
最近看了一些国外的程序,一些程序喜欢用hashtable来做图片缓存,据我所知hashtable只是一个对应关系存储的表,不知道那么做有什么好处

cache = new Hashtable();

public Image loadImage(String s)
{
try
{
return Image.createImage("/res/" + s);
}
catch(Exception exception)
{
return null;
}
}

cache.put("mario.png", loadImage("mario.png"));
cache.put("bricks.png", loadImage("bricks.png"));
cache.put("characters1.png", loadImage("characters1.png"));
cache.put("characters2.png", loadImage("characters2.png"));

然后用的时候使用类似这样的方法

Image image=(Image)cache.get("characters2.png");

为什么不直接用

Image image=loadImage("characters2.png")

这种形式启不是更方便?

多了一个hashtable的开销啊



...全文
272 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
prqin 2006-04-01
  • 打赏
  • 举报
回复
那有没有人实际测试过这样内存的开销会加大多少呢,要知道这是手机程序,内存很紧张的
prqin 2006-03-30
  • 打赏
  • 举报
回复
问题是用了hashtable 也不能避免定义图片

比如

Image image11=(Image)cache.get("characters1.png");
Image image12=(Image)cache.get("characters2.png");

。。。

hashtable 仅仅是用(Image)cache.get("characters2.png");代替了loadImage("characters2.png")

这是我不太理解为什么要这么做的原因,因为没带来多少方便,反而增加了系统开销。
图门的世界 2006-03-30
  • 打赏
  • 举报
回复
我知道你也是可以只load一次
那如果图片有10张,你是不是要定义十个image变量?
即使你使用数组之类的,有hashtable方便么?
idilent 2006-03-30
  • 打赏
  • 举报
回复
应该是那个hashtable是static的吧,这样多个对象使用这些图片也不用再重新load了,看过这种用法,个人认为不是很好的设计。
prqin 2006-03-30
  • 打赏
  • 举报
回复
不是啊,只是再init的时候做loadimage,然后在close的时候置null
图门的世界 2006-03-30
  • 打赏
  • 举报
回复
Image image=loadImage("characters2.png")

那如果说需要多次显示这个图片怎么办呢?
难道你要每次都load?
而且即使是你把这些image的引用记下来,变量名称是不是要很长?也不比hashtable更容易理解吧?
liujun999999 2006-03-30
  • 打赏
  • 举报
回复
这个做法不一定很好
idilent 2006-03-30
  • 打赏
  • 举报
回复
我都和你讲了,如果Hashtable是静态的,就起到了整个application范围的cache的作用,说是整个application有点不准确,应该是起到了能够访问Hashtable所在类的所有对象范围内的cache作用。比如你有n个class要用到这些图片,那么你只要在一个class里面定义这样的Hashtable,然后在n个class总随便使用,而不需要每次使用都自己去load。这个的确有存在的价值,只是设计的不好而已。
cxc014 2006-03-30
  • 打赏
  • 举报
回复
没多大意义

13,100

社区成员

发帖
与我相关
我的任务
社区描述
Java J2ME
社区管理员
  • J2ME社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧