`
racingbird
  • 浏览: 23951 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

享元Map

 
阅读更多

这里之所以叫享元,注意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)));
	}
	
}
分享到:
评论

相关推荐

    Java设计模式之享元模式

    享元模式是软件设计模式中的一种结构型模式,它的核心思想是通过共享已经存在的对象来减少内存中的对象数量,从而提高系统性能。在Java中,享元模式常用于处理大量相似对象的场景,例如在图形界面中绘制大量相似的...

    Android享元模式Demo

    享元模式是一种优化资源利用、减少对象创建的设计模式,它在Android开发中也有着广泛的应用。在这个"Android享元模式Demo"中,我们将探讨如何在Android环境中实现享元模式,并通过具体的实例来理解其工作原理。 享...

    fly-weight-demo享元模式示例

    享元模式是一种结构型设计模式,它通过共享已有对象来减少系统中对象的数量,从而达到降低内存消耗和提高性能的目的。在Java编程中,享元模式通常用于处理大量相似对象的场景,例如在图形界面、文本渲染或者数据库...

    java基础设计模式模式 - 享元模式.7z

    享元模式是一种优化资源使用的软件设计模式,尤其适用于对象创建成本较高或系统内存有限的场景。在Java编程中,享元模式通过共享已有对象来减少内存中的对象数量,从而提高性能。这种模式的核心是实现细粒度对象的...

    [结构型模式] 享元模式的理解

    享元模式是一种结构型设计模式,它通过共享对象来支持大量细粒度的对象,从而减少内存的使用。这种模式在处理大量相似对象时特别有效,尤其是当这些对象的大部分状态都可以外部化时。享元模式的核心是实现对象的共享...

    第3.4章 享元模式1

    享元模式是一种软件设计模式,它的主要目的是为了提高性能,特别是在处理大量细粒度对象时。在享元模式中,通过共享对象的不变部分来减少内存的使用,从而提高系统效率。这种模式的关键在于区分对象的内部状态和外部...

    C++设计模式之享元模式(Flyweight)

    C++设计模式之享元模式(Flyweight) C++设计模式之享元模式(Flyweight)是一种结构型设计模式,主要用于解决大量相似对象的创建和操作所带来的内存负载问题。该模式的主要设计目标是通过共享对象来减少内存负载,...

    【设计模式】享元模式 实现 ( 实现流程 | 抽象享元类 | 具体享元类 | 享元工厂 | 用户调用 | 代码模板 )

    - 对象池:通常使用Map存储享元对象,以外部状态为键,享元对象为值。 - 对象获取机制:根据外部状态查找或创建享元对象,并返回给用户。 4. **用户调用** - 用户通过享元工厂获取抽象享元类类型的对象,实际为...

    JavaScript设计模式之享元模式实例详解

    享元模式是一种优化性能的设计模式,它通过共享对象来减少内存中的对象数量,从而降低内存占用和提高系统效率。在JavaScript中,享元模式通常用于处理大量相似对象的场景,尤其是当这些对象大部分属性相同而只有少量...

    享元、解释器、职责链、装饰模式

    public static Map,Double&gt; mapMonthSaleMoney = new HashMap,Double&gt;(); static{ //填充测试数据 mapMonthSaleMoney.put("张三",10000.0); mapMonthSaleMoney.put("李四",20000.0); mapMonthSaleMoney....

    详解Java设计模式编程中的Flyweight享元模式的开发结构

    享元模式是一种优化资源利用的设计模式,主要用于减少创建和管理大量相似对象的开销。在Java编程中,享元模式的应用十分广泛,特别是在处理大量细粒度对象时,它可以极大地提高程序性能。以下是对享元模式及其在Java...

    C++设计模式之享元模式

    同时,可以使用STL容器(如std::unordered_map)来存储已创建的享元对象,便于快速查找和复用。 总的来说,享元模式是一种有效的优化手段,尤其是在处理大量相似对象时,它可以显著减少内存占用,提高系统效率。在...

    cpp代码-设计模式-享元模式

    享元模式是一种优化资源使用的软件设计模式,尤其适用于大量细粒度对象的场景。在C++编程中,享元模式可以有效地减少内存消耗,通过共享技术实现对对象的高效管理。这种模式的核心思想是共享已经存在的对象,而不是...

    轻松掌握Java享元模式

    } }享元模式是一种设计模式,它通过共享技术有效地支持大量细粒度对象的复用。在Java中,享元模式可以帮助我们减少内存消耗,提高系统性能,尤其是在处理大量相似对象时。 在上述代码中,我们看到了一个简单的享元...

    常见设计模式的解析和实现(C++)之九

    3. **享元工厂**:工厂类负责创建和管理享元对象,它维护一个享元集合,并根据需要返回已存在的享元或创建新的享元。 ```cpp class FlyweightFactory { private: map, shared_ptr&lt;Flyweight&gt;&gt; flyweights; public:...

    osm-in-qgis:用于在 QGIS 中共享 OpenStreetMap 数据的 3liz 样式的存储库

    用于在 QGIS 中共享 OpenStreetMap 数据的 3liz 样式的存储库 介绍 QGIS 提供了很好的工具来设计矢量和栅格图层。 我们创建这个存储库是为了分享一些使用 OpenStreetMap 数据构建 baselayer 的样式。 用法 土工布 ...

    MapMatrix中文用户手册

    享提供基础。成为数据的采集、处理、编辑、入库、维护和更新等空间地理信息 数据处理的整体解决方案,该系统可广泛地应用于基础测绘、城市规划、国土资 源、卫星遥感、军事测量、公路、铁路、水利、电力、能源、环保...

    FlyWeight

    然后创建一个享元工厂类,它负责管理享元对象的创建和查找,确保对相同内部状态的享元对象进行复用: ```cpp class FlyweightFactory { public: // 获取享元对象,如果不存在则创建 Flyweight* getFlyweight(int ...

    享兼职移动APP-3期(AL028) AL028030200008 详细设计书8-通讯模块.doc

    - `doPost()`:POST请求,接收URL和Map参数,将参数放入请求体中。 - `doPost2()`:与`doPost()`类似,但额外接收一个session参数,将其设置在请求头中。 - `doPostWithJson()`:POST请求,支持JSON格式的参数。 ...

    享兼职移动APP-3期(AL028) 详细设计书8-通讯模块.doc

    - `doPost()`:执行POST请求,传入URL、参数Map和回调函数。 - `doPost2()`:与`doPost()`类似,但额外接收已保存的session信息,用于身份验证。 - `doPost3()`:以JSON格式传递参数的POST请求。 - `doFile()`:文件...

Global site tag (gtag.js) - Google Analytics