Java Hashtable put方法减慢了我的应用程序

Vin*_*oye 2 java performance image hashtable put

我需要去做 :

Dictionary cache;
cache = new Hashtable();
this.getDocument().putProperty("imageCache", cache);
Run Code Online (Sandbox Code Playgroud)

然后我有一个方法:

cache.put(url, picture);
Run Code Online (Sandbox Code Playgroud)

其中picture是一个Image对象.我这样创造:

public Image getSmiley(String smileyName) {
    BufferedImage img = new BufferedImage(16, 16, BufferedImage.TYPE_INT_ARGB);
    Graphics g = img.getGraphics();
    ImageIcon myicon = new ImageIcon(getClass().getResource("/ola/smileys/" + smileyName + ".png"));
    myicon.paintIcon(null, g, 0, 0);
    return img;
}
Run Code Online (Sandbox Code Playgroud)

我已经运行了一个分析,我已经看到,当我将这个方法称为"put"时,应用程序的运行速度令人难以置信.可能是什么原因 ?

非常感谢你.

最好的祝福

Ste*_*n C 5

我怀疑这可能是由于您使用URL类作为键类型.

javadoc中URL.equals(Object)这样说:

如果两个URL对象具有相同的协议,引用等效主机,主机上具有相同的端口号,以及文件的相同文件和片段,则它们是相等的.

如果两个主机名都可以解析为相同的IP地址,则认为两个主机是等效的.否则,如果无法解析任何一个主机名,则主机名必须相等而不考虑大小写; 或两个主机名都等于​​null.

由于主机比较需要名称解析,因此此操作是阻止操作.

当您将一个URL实例用作映射中的键时,每次将一个键与另一个键进行比较时,您可能会触发DNS查找...这可能需要很长时间.


如果这是您的问题,那么您需要将地图的密钥类型更改为StringURI......或其他没有昂贵equals(Object)方法的内容.