容器与享元模式
import java.util.*;
public class CountingMapData
extends AbstractMap<Integer, String>
{
private int size;
private static String[] chars =
"A B C D E F G H I J K L M N O P Q R S T U V W X Y Z"
.split(" ");
public CountingMapData(int size)
{
if(size < 0) this.size = 0;
this.size = size;
}
private static class Entry
implements Map.Entry<Integer, String>
{
int index;
Entry(int index)
{
this.index = index;
}
public boolean equals(Object o) {
return o instanceof Integer && Integer.valueOf(index).equals(o);
}
public Integer getKey()
{
return index;
}
public String getValue()
{
return
chars[index % chars.length] +
Integer.toString(index / chars.length);
}
public String setValue(String value)
{
throw new UnsupportedOperationException();
}
public int hashCode()
{
return Integer.valueOf(index).hashCode();
}
}
public Set<Map.Entry<Integer, String>> entrySet()
{
// LinkedHashSet retains initialization order:
Set<Map.Entry<Integer, String>> entries =
new LinkedHashSet<>(); //这个LinkedHashSet
for(int i = 0; i < size; i++)
entries.add(new Entry(i));
return entries;
}
public static void main(String[] args)
{
System.out.println(new CountingMapData(60));
}
}
这是thingking in java中关于容器和享元模式的实现, 书上说由于entrySet
中的set
集合使用LinkedHashSet
实现的, 所以并不是完全实现了享元模式, 我对这句话不是很理解, 为什么用了LinkedHashSet
就不是彻底的享元模式呢? 享元模式是以共享对象的方式来提高性能的, 对于CountingMapData
我感觉完全符合了, 不明白哪里不符合享元模式.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论