java编程思想-定制Map过程中出现的bug调试
2015-11-18 22:09
477 查看
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编程思想11.10-map
- 开发过程中出现的bug以及原因
- 解决一个只在调试运行状态下才出现的bug
- 调试android程序过程中出现:INSTALL_FAILED_INSUFFICIENT_STORAGE
- 调试一个socket通信bug的心理过程和反思
- 调试魅族手机不显示通知栏消息bug的过程
- 调试过程中出现以下问题.\layout\activity_main.out.xml:1: error: Error parsing XML: no element found
- Spring MVC + zTree调试过程出现406 not acceptable
- 调试过程出现的错误汇总
- 7.JAVA编程思想笔记隐藏实施过程
- 关于存储过程的bug的调试
- 驱动调试过程出现的一下问题分析
- 关于VCO调试过程中出现相噪-141dBC/Hz@50KHz说明
- 使用vc6.0调试程序的过程中出现find source的问题
- java编程思想(四)隐藏实施过程
- 类的创建过程(摘抄与java编程思想)
- EVC编程与调试过程出现的问题
- SqlServer Bug:扩展存储过程一直运行出现等待类型PREEMPTIVE_OS_GETPROCADDRESS
- 6410平台500W摄像头调试过程 && 拍照偏绿和图片保存等BUG
- Think PHP关闭调试模式后出现奇怪的bug的解决方法.