首页 > 容器与享元模式

容器与享元模式

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我感觉完全符合了, 不明白哪里不符合享元模式.

【热门文章】
【热门文章】