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中,这一过程被大大简化。程序员不再需要时刻关注正在处理的数据类型,因为无论何时都在以一致的语法处理对象。在C或C++中,可能需要通过指针这样的间接表示来操作,而...
《Java编程思想》是Java开发领域的一本经典著作,由Bruce Eckel撰写,中文第三版则是针对中国读者的翻译版本,旨在帮助读者深入理解和掌握Java编程语言。这本书以清晰、简洁的语言介绍了Java的核心概念和技术,适合...
《Java编程思想》是Java程序员领域的一本经典之作,由Bruce Eckel撰写,以其深入浅出的讲解方式和丰富的实例闻名。这本书对于想要深入理解Java语言的人来说,是一份宝贵的资源。"Thinking in Java",直译为“思考...
这份"Crazy-JAVA-mind-map.zip"压缩包包含了一个名为"Crazy JAVA mind map.mmap"的思维导图文件,这个导图就是对《疯狂JAVA讲义》内容的高度概括和逻辑梳理,旨在帮助学习者更好地理解和记忆书中的知识点。...
而"Java编程思想_第4版—习题答案"这个压缩包则为读者提供了书中的习题解答,是学习过程中不可或缺的辅助资料。 1. 面向对象编程:Java是一种面向对象的语言,它强调将数据和操作数据的方法封装在一起,形成对象。...
从标签“java”我们可以推断,这个压缩包的内容是与Java编程语言相关的,可能是一个Java项目或者是一些用于Java环境的库或工具。 压缩包子文件的文件名列表提供了一些额外的信息: 1. SDKShell.bat:这可能是一个...
《Java编程思想》是Java初学者的一本经典教材,它以其深入浅出的讲解和丰富的实例,深受读者喜爱。本书全面覆盖了Java的基础知识,包括语法特性、面向对象编程概念、异常处理、集合框架、多线程、网络编程等多个方面...
《Think in Java 4 code.rar》中应包含了书中各个章节的源代码示例,这些代码是学习Java编程思想的关键实践部分,通过阅读和运行这些代码,读者可以更直观地理解书中的理论概念。而《Thinking In Java 练习题答案 第...
6. **接口**:Java中的接口是一种完全抽象的类型,用于定义行为规范。通过接口,可以实现多重继承的效果,同时保持类之间的松耦合。 7. **异常处理**:Java的异常处理机制(try-catch-finally)使得程序能够优雅地...
本文将深入探讨如何在Java中使用`keySet`方法来遍历`Map`集合,以及相关的知识点。 ### 一、Java Map接口简介 `Map`接口是Java集合框架的一部分,它提供了存储和检索唯一键对象及其对应的值对象的方法。一个`Map`...
在压缩包文件“java编程思想企业版.zip”中,主要包含的资源是英文版的《Java编程思想企业版》文档。为了便于阅读,你可以参考提供的博客链接获取目录文档,并使用谷歌翻译将HTML文档翻译成中文。在浏览器中直接拖入...
《Java编程思想》是 Bruce Eckel 编著的一本经典Java教程,这本书深入浅出地讲解了Java语言的核心概念和编程技巧。书中的练习题旨在帮助读者巩固所学知识,提高编程技能。以下是对这些练习题及参考答案的详细解析: ...
2. **类和对象**:Java中的类定义了对象的行为和状态,而对象则是类的实例。通过类和对象的概念,可以实现代码的重用性和灵活性。 3. **异常处理**:Java提供了一套强大的异常处理机制,帮助开发者处理程序执行过程...
《Java编程思想习题答案代码》是一份针对学习Java编程思想的宝贵资源,它提供了书中的课后习题解答,旨在帮助学习者在探索Java语言的过程中进行实践和检验自己的理解。这份资料通常与《Thinking in Java》这本书配套...
《Java编程思想》是 Bruce Eckel 的经典之作,这本书深入浅出地讲解了Java语言的各个方面,对于初学者和有经验的开发者都是宝贵的资源。课后习题解答则是学习过程中不可或缺的一部分,它提供了实践和检验理论知识的...
这个名为“Alibaba Java Coding Guidelines (Fix Some Bug) 1.6-2023.2.1”的压缩包文件,显然包含了针对Java编程中常见问题和bug的修复建议,旨在帮助开发者提高代码质量,减少潜在错误,提升团队协作效率。...
《Java编程思想》是 Bruce Eckel 的经典著作,这本书深入浅出地讲解了Java语言的核心概念和编程技术。这份读书笔记记录了读者在研读此书过程中的理解和体会,涵盖了从基础语法到高级特性的全面解析。以下是笔记中...
3. **异常处理**:Java中的异常处理机制有助于编写健壮的代码。书中的章节将解释如何使用try-catch-finally结构,以及不同类型的异常类。 4. **集合框架**:Java集合框架是存储和管理对象的重要工具,包括List、Set...