容器与享元模式

发布于 2022-09-02 01:19:30 字数 1966 浏览 16 评论 0

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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文