`

java编程思想-定制Map过程中出现的bug调试

阅读更多
package com.jackie;

import java.util.*;

/**
 * Created by zhimeng on 15/11/18.
 */
public class Countries {
    public static String[][] DATA = new String[][]{
            {"China", "Beijing"}, {"Japan", "Tokyo"},
            {"Taiwan", "Taibei"}, {"Zhejian", "Hangzhou"},
            {"Hubei", "Wuhan"}, {"Jiangsu", "Nanjing"}
    };

    public static void main(String[] args) {
        System.out.println(Countries.DATA);
    }
}

class FlyweightMap extends AbstractMap<String, String> {
    public static void main(String[] args) {
        System.out.println(Countries.DATA);
    }

    @Override
    public Set<Map.Entry<String, String>> entrySet() {
        return entries;
    }

    private static class Entry implements Map.Entry<String, String> {
        int index = -1;

        public Entry(int index) {
            this.index = index;
        }

        public String getKey() {
            return Countries.DATA[index][0];
        }

        public String getValue() {
            return Countries.DATA[index][1];
        }

        public String setValue(String value) {
            throw new UnsupportedOperationException();
        }

        @Override
        public boolean equals(Object obj) {
            return Countries.DATA[index][0].equals(obj);
        }

        @Override
        public int hashCode() {
            return Countries.DATA[index][0].hashCode();
        }
    }

    private static class EntrySet extends AbstractSet<Map.Entry<String, String>> {
        private int size;
        private Entry entry = new Entry(-1);

        public EntrySet(int size) {
            if (size < 0) {
                this.size = 0;
            } else if (size > Countries.DATA.length) {
                this.size = Countries.DATA.length;
            } else {
                this.size = size;
            }
        }

        @Override
        public Iterator<Map.Entry<String, String>> iterator() {
            return new Iter();
        }

        @Override
        public int size() {
            return size;
        }

        private class Iter implements Iterator<Map.Entry<String, String>> {

            public boolean hasNext() {
                System.out.println("size: " + size);      //这里除了错误。因为这个判断条件应该是size-1;

                return entry.index < size-1;
            }

            public Map.Entry<String, String> next() {
                entry.index++;
                System.out.println("entry index: " + entry.index);
                return entry;
            }
        }
    }

    private static Set<Map.Entry<String, String>> entries = new EntrySet(Countries.DATA.length);

    public static Map<String, String> select(final int size) {
        return new FlyweightMap() {
            @Override
            public Set<Map.Entry<String, String>> entrySet() {
                return new EntrySet(size);
            }
        };
    }

    public static Map<String, String> map = new FlyweightMap();

    public static Map<String, String> capitals() {
        return map;
    }

    public static Map<String, String> capitals(int size) {
        return select(size);
    }

    static List<String> names = new ArrayList<String>(map.keySet());

    public static List<String> names() {
        return names;
    }

    public static List<String> names(int size) {
        return new ArrayList<String>(select(size).keySet());
    }


}



ps: 因为map  在生成keySet() 的时候,会调用entrySet()。 仅供自己bug的记录。
分享到:
评论

相关推荐

    Java编程思想--外文文献原文及译文(可编辑).doc

    每种编程语言都有自己的数据操作方式,但在Java中,这一过程被大大简化。程序员不再需要时刻关注正在处理的数据类型,因为无论何时都在以一致的语法处理对象。在C或C++中,可能需要通过指针这样的间接表示来操作,而...

    Java 编程思想中文第三版(PDF)

    《Java编程思想》是Java开发领域的一本经典著作,由Bruce Eckel撰写,中文第三版则是针对中国读者的翻译版本,旨在帮助读者深入理解和掌握Java编程语言。这本书以清晰、简洁的语言介绍了Java的核心概念和技术,适合...

    《java编程思想》_java编程思想_java编程思想_ThinkinginJava_mileefx_

    《Java编程思想》是Java程序员领域的一本经典之作,由Bruce Eckel撰写,以其深入浅出的讲解方式和丰富的实例闻名。这本书对于想要深入理解Java语言的人来说,是一份宝贵的资源。"Thinking in Java",直译为“思考...

    Crazy-JAVA-mind-map.zip_Crazy JAVA mind map_crazy_java-mindmap_m

    这份"Crazy-JAVA-mind-map.zip"压缩包包含了一个名为"Crazy JAVA mind map.mmap"的思维导图文件,这个导图就是对《疯狂JAVA讲义》内容的高度概括和逻辑梳理,旨在帮助学习者更好地理解和记忆书中的知识点。...

    Java编程思想_第4版—习题答案.rar

    而"Java编程思想_第4版—习题答案"这个压缩包则为读者提供了书中的习题解答,是学习过程中不可或缺的辅助资料。 1. 面向对象编程:Java是一种面向对象的语言,它强调将数据和操作数据的方法封装在一起,形成对象。...

    release-1928-x64-gdal-3-8-5-mapserver-8-0-1

    从标签“java”我们可以推断,这个压缩包的内容是与Java编程语言相关的,可能是一个Java项目或者是一些用于Java环境的库或工具。 压缩包子文件的文件名列表提供了一些额外的信息: 1. SDKShell.bat:这可能是一个...

    java 编程思想java初学

    《Java编程思想》是Java初学者的一本经典教材,它以其深入浅出的讲解和丰富的实例,深受读者喜爱。本书全面覆盖了Java的基础知识,包括语法特性、面向对象编程概念、异常处理、集合框架、多线程、网络编程等多个方面...

    Java编程思想源代码及课后练习代码

    《Think in Java 4 code.rar》中应包含了书中各个章节的源代码示例,这些代码是学习Java编程思想的关键实践部分,通过阅读和运行这些代码,读者可以更直观地理解书中的理论概念。而《Thinking In Java 练习题答案 第...

    java编程思想书本示例和习题答案

    6. **接口**:Java中的接口是一种完全抽象的类型,用于定义行为规范。通过接口,可以实现多重继承的效果,同时保持类之间的松耦合。 7. **异常处理**:Java的异常处理机制(try-catch-finally)使得程序能够优雅地...

    java-遍历map

    本文将深入探讨如何在Java中使用`keySet`方法来遍历`Map`集合,以及相关的知识点。 ### 一、Java Map接口简介 `Map`接口是Java集合框架的一部分,它提供了存储和检索唯一键对象及其对应的值对象的方法。一个`Map`...

    java编程思想企业版.zip

    在压缩包文件“java编程思想企业版.zip”中,主要包含的资源是英文版的《Java编程思想企业版》文档。为了便于阅读,你可以参考提供的博客链接获取目录文档,并使用谷歌翻译将HTML文档翻译成中文。在浏览器中直接拖入...

    java编程思想参考答案

    《Java编程思想》是 Bruce Eckel 编著的一本经典Java教程,这本书深入浅出地讲解了Java语言的核心概念和编程技巧。书中的练习题旨在帮助读者巩固所学知识,提高编程技能。以下是对这些练习题及参考答案的详细解析: ...

    java 编程思想 所有版本免费下载!!(已经删除)

    2. **类和对象**:Java中的类定义了对象的行为和状态,而对象则是类的实例。通过类和对象的概念,可以实现代码的重用性和灵活性。 3. **异常处理**:Java提供了一套强大的异常处理机制,帮助开发者处理程序执行过程...

    Java编程思想习题答案代码

    《Java编程思想习题答案代码》是一份针对学习Java编程思想的宝贵资源,它提供了书中的课后习题解答,旨在帮助学习者在探索Java语言的过程中进行实践和检验自己的理解。这份资料通常与《Thinking in Java》这本书配套...

    java编程思想课后题答案

    《Java编程思想》是 Bruce Eckel 的经典之作,这本书深入浅出地讲解了Java语言的各个方面,对于初学者和有经验的开发者都是宝贵的资源。课后习题解答则是学习过程中不可或缺的一部分,它提供了实践和检验理论知识的...

    Alibaba-Java-Coding-Guidelines-Fix-Some-Bug-1.6-2023.2-2.1

    这个名为“Alibaba Java Coding Guidelines (Fix Some Bug) 1.6-2023.2.1”的压缩包文件,显然包含了针对Java编程中常见问题和bug的修复建议,旨在帮助开发者提高代码质量,减少潜在错误,提升团队协作效率。...

    java编程思想读书笔记

    《Java编程思想》是 Bruce Eckel 的经典著作,这本书深入浅出地讲解了Java语言的核心概念和编程技术。这份读书笔记记录了读者在研读此书过程中的理解和体会,涵盖了从基础语法到高级特性的全面解析。以下是笔记中...

    java编程思想

    3. **异常处理**:Java中的异常处理机制有助于编写健壮的代码。书中的章节将解释如何使用try-catch-finally结构,以及不同类型的异常类。 4. **集合框架**:Java集合框架是存储和管理对象的重要工具,包括List、Set...

Global site tag (gtag.js) - Google Analytics