这里之所以叫享元,注意static关键字。 定制了Entry 和 EntrySet
public class Countries { public static final String[][] DATA = { {"CHINA","BEIJING"} }; private static class FlyweightMap extends AbstractMap<String, String>{ private static class Entry implements Map.Entry<String, String>{ int index; Entry(int index){ this.index = index; } public String getKey() { return DATA[index][0]; } public String getValue() { return DATA[index][1]; } public String setValue(String value) { throw new UnsupportedOperationException(); } public boolean equals(Object o){ return DATA[index][0].equals(o); } public int hashCode(){ return DATA[index][0].hashCode(); } } static class EntrySet extends AbstractSet<Map.Entry<String, String>>{ private int size; EntrySet(int size){ if(size<0) this.size = 0; else if(size>DATA.length) this.size = DATA.length; else this.size = size; } public Iterator<java.util.Map.Entry<String, String>> iterator() { return new Iter(); } @Override public int size() { return size; } private class Iter implements Iterator<Map.Entry<String, String>>{ // Only one Entry object per Iterator private Entry entry = new Entry(-1); @Override public boolean hasNext() { return entry.index < size-1; } @Override public java.util.Map.Entry<String, String> next() { entry.index++; return entry; } @Override public void remove() { throw new UnsupportedOperationException(); } } } public Set<java.util.Map.Entry<String, String>> entrySet() { return entries; } private static Set<Map.Entry<String, String>> entries = new EntrySet(DATA.length); } static Map<String, String> select(final int size){ return new FlyweightMap(){ public Set<Map.Entry<String, String>> entrySet(){ return new EntrySet(size); } }; } 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()); } public static void main(String[] args) { System.out.println(new TreeMap<String, String>(capitals(3))); } }
发表评论
-
仿真[汽车制造]
2012-02-13 01:26 697class Car{ private final i ... -
线程例子[Condition, SignlAll, await]
2012-02-09 22:05 1040package concurrency.waxomati ... -
生产者消费者[简单示例]
2012-02-09 21:38 663class Meal{ private final ... -
泛型[创建类型实例]
2012-02-06 01:01 750public Class Erased<T> ... -
多路分发3
2012-02-05 23:16 839使用常量相关的方法 常量相关的方法允许我们为每个 ... -
多路分发2[使用enum分发]
2012-02-05 18:09 1911直接将RoShamBo1.java翻译为基于enum的版 ... -
多路分发
2012-02-05 02:06 1394多路分发 Number.plus(Number) ... -
使用Enum的自动贩卖机
2012-02-04 13:52 938public enum Input { NICKEL ... -
使用enum的责任链
2012-02-04 12:39 1193package enumerated; impor ... -
枚举类Enum,EnumSet,EnumMap
2012-02-04 02:00 1438EnumSet与HashSet相比,非常快。 p ... -
枚举类enum
2012-02-03 15:00 908一般来说,我们希望每个美剧实例能够返回对自身的描述, ... -
类的简化历[从内部类到匿名内部类]
2012-02-02 12:41 638Version1: public class DirL ... -
持有引用java.lang.ref 和 WeakHashMap
2012-02-02 01:27 985Thinking in java P554 持 ... -
Collections快速报错 fial-fast
2012-02-02 00:46 804{ public static void main( ... -
散列HashCode
2012-02-01 14:04 714散列的价值在于速度: 散列使得查询快速,由于瓶颈位于键 ... -
使用散列数据结构注意点
2012-02-01 01:32 594Goundhog自动继承基类Object,所以这里使用 ... -
Set注意点
2012-02-01 01:31 319如果我们尝试着将没有恰当支持不许的操作的类型用于需要这些 ... -
深入容器Map
2012-01-19 15:12 403Map生成器 对Map的使用相同的方式,需要一 ... -
深入容器List
2012-01-19 14:40 348一种Generator解决方案: 所有Collect ... -
泛型数组
2012-01-19 00:57 645不能创建泛型数组,但能通过转型来赋予 public cl ...
相关推荐
享元模式是软件设计模式中的一种结构型模式,它的核心思想是通过共享已经存在的对象来减少内存中的对象数量,从而提高系统性能。在Java中,享元模式常用于处理大量相似对象的场景,例如在图形界面中绘制大量相似的...
享元模式是一种优化资源利用、减少对象创建的设计模式,它在Android开发中也有着广泛的应用。在这个"Android享元模式Demo"中,我们将探讨如何在Android环境中实现享元模式,并通过具体的实例来理解其工作原理。 享...
享元模式是一种结构型设计模式,它通过共享已有对象来减少系统中对象的数量,从而达到降低内存消耗和提高性能的目的。在Java编程中,享元模式通常用于处理大量相似对象的场景,例如在图形界面、文本渲染或者数据库...
享元模式是一种优化资源使用的软件设计模式,尤其适用于对象创建成本较高或系统内存有限的场景。在Java编程中,享元模式通过共享已有对象来减少内存中的对象数量,从而提高性能。这种模式的核心是实现细粒度对象的...
享元模式是一种结构型设计模式,它通过共享对象来支持大量细粒度的对象,从而减少内存的使用。这种模式在处理大量相似对象时特别有效,尤其是当这些对象的大部分状态都可以外部化时。享元模式的核心是实现对象的共享...
享元模式是一种软件设计模式,它的主要目的是为了提高性能,特别是在处理大量细粒度对象时。在享元模式中,通过共享对象的不变部分来减少内存的使用,从而提高系统效率。这种模式的关键在于区分对象的内部状态和外部...
C++设计模式之享元模式(Flyweight) C++设计模式之享元模式(Flyweight)是一种结构型设计模式,主要用于解决大量相似对象的创建和操作所带来的内存负载问题。该模式的主要设计目标是通过共享对象来减少内存负载,...
- 对象池:通常使用Map存储享元对象,以外部状态为键,享元对象为值。 - 对象获取机制:根据外部状态查找或创建享元对象,并返回给用户。 4. **用户调用** - 用户通过享元工厂获取抽象享元类类型的对象,实际为...
享元模式是一种优化性能的设计模式,它通过共享对象来减少内存中的对象数量,从而降低内存占用和提高系统效率。在JavaScript中,享元模式通常用于处理大量相似对象的场景,尤其是当这些对象大部分属性相同而只有少量...
public static Map,Double> mapMonthSaleMoney = new HashMap,Double>(); static{ //填充测试数据 mapMonthSaleMoney.put("张三",10000.0); mapMonthSaleMoney.put("李四",20000.0); mapMonthSaleMoney....
享元模式是一种优化资源利用的设计模式,主要用于减少创建和管理大量相似对象的开销。在Java编程中,享元模式的应用十分广泛,特别是在处理大量细粒度对象时,它可以极大地提高程序性能。以下是对享元模式及其在Java...
同时,可以使用STL容器(如std::unordered_map)来存储已创建的享元对象,便于快速查找和复用。 总的来说,享元模式是一种有效的优化手段,尤其是在处理大量相似对象时,它可以显著减少内存占用,提高系统效率。在...
享元模式是一种优化资源使用的软件设计模式,尤其适用于大量细粒度对象的场景。在C++编程中,享元模式可以有效地减少内存消耗,通过共享技术实现对对象的高效管理。这种模式的核心思想是共享已经存在的对象,而不是...
} }享元模式是一种设计模式,它通过共享技术有效地支持大量细粒度对象的复用。在Java中,享元模式可以帮助我们减少内存消耗,提高系统性能,尤其是在处理大量相似对象时。 在上述代码中,我们看到了一个简单的享元...
3. **享元工厂**:工厂类负责创建和管理享元对象,它维护一个享元集合,并根据需要返回已存在的享元或创建新的享元。 ```cpp class FlyweightFactory { private: map, shared_ptr<Flyweight>> flyweights; public:...
用于在 QGIS 中共享 OpenStreetMap 数据的 3liz 样式的存储库 介绍 QGIS 提供了很好的工具来设计矢量和栅格图层。 我们创建这个存储库是为了分享一些使用 OpenStreetMap 数据构建 baselayer 的样式。 用法 土工布 ...
享提供基础。成为数据的采集、处理、编辑、入库、维护和更新等空间地理信息 数据处理的整体解决方案,该系统可广泛地应用于基础测绘、城市规划、国土资 源、卫星遥感、军事测量、公路、铁路、水利、电力、能源、环保...
然后创建一个享元工厂类,它负责管理享元对象的创建和查找,确保对相同内部状态的享元对象进行复用: ```cpp class FlyweightFactory { public: // 获取享元对象,如果不存在则创建 Flyweight* getFlyweight(int ...
- `doPost()`:POST请求,接收URL和Map参数,将参数放入请求体中。 - `doPost2()`:与`doPost()`类似,但额外接收一个session参数,将其设置在请求头中。 - `doPostWithJson()`:POST请求,支持JSON格式的参数。 ...
- `doPost()`:执行POST请求,传入URL、参数Map和回调函数。 - `doPost2()`:与`doPost()`类似,但额外接收已保存的session信息,用于身份验证。 - `doPost3()`:以JSON格式传递参数的POST请求。 - `doFile()`:文件...