基於DB4O的Java Map

Java的Map是大家最常用的一個容器接口,它通過靈活的key/value結構存儲數據。因爲Map的簡單易用很多工程師喜歡大量使用Map存放數據。但是Map的數據是存放在內存中,大量的數據存在內存中,不只是造成Java系統內存遍歷慢的隱憂,更加可能系統內存溢出。
針對這個問題,我們重新利用DB4O實現Map的接口,利用DB4O的對象高效的物理存儲特性來減輕Java的內存壓力。
        大概邏輯圖如下:



操作例子
package com.shine.framework.DB4o.example;

import java.util.HashMap;
import java.util.Map;

import com.shine.framework.DB4o.util.DB4oMap;

public class DB4oMapExample {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		/**=========== 簡單對象存儲 ============*/
		DB4oMap<String, Object> map = new DB4oMap<String, Object>(true);
		// 添加數據
		System.out.println(map.put("key1", "value1"));
		System.out.println(map.put("key1", "value2"));
		System.out.println(map.put("key1", "value3"));
		System.out.println(map.put("key1", "value4"));
		System.out.println(map.put("key2", "value2"));
		System.out.println(map.put("key3", "value3"));
		System.out.println(map.put("key4", "value4"));
		// 檢查數據
		System.out.println(map.containsKey("key1"));
		System.out.println(map.containsValue("value1"));
		System.out.println(map.isEmpty());
		// 獲取單條數據
		System.out.println(map.get("key2"));
		// 刪除單條數據
		System.out.println(map.remove("key1"));
		System.out.println(map.remove("key4", "value4"));
		// 刪除所有數據
		map.removeAll("key2");
		// 查詢所有數據
		for (Object obj : map.getAll()) {
			System.out.println(obj);
		}
		// 遍歷所有鍵
		for (String key : map.keySet()) {
			System.out.println(key);
		}
		// 遍歷所有值
		for (Object value : map.values()) {
			System.out.println(value);
		}
		// 遍歷所有的鍵值對
		for (Map.Entry<String, Object> entry : map.entrySet()) {
			System.out.println(entry.getKey() + " : " + entry.getValue());
		}
		// 清空所有數據
		map.clear();
		// 查詢總數
		System.out.println(map.size());
		// 釋放資源
		map.destroy();
		
		/**=========== 高級對象存儲 ============*/
		DB4oMap<String, Map<String, String>> map2 = new DB4oMap<String, Map<String, String>>();
		// 添加數據
		Map<String, String> data1 = new HashMap<String, String>();
		data1.put("data1.key1", "data1.value1");
		data1.put("data1.key2", "data1.value2");
		Map<String, String> data2 = new HashMap<String, String>();
		data2.put("data2.key1", "data2.value1");
		data2.put("data2.key2", "data2.value2");
		Map<String, String> data3 = new HashMap<String, String>();
		data3.put("data3.key1", "data3.value1");
		Map<String, String> data4 = new HashMap<String, String>();
		data4.put("data4.key1", "data4.value1");
		data4.put("data4.key2", "data4.value1");
		data4.put("data4.key3", "data4.value1");
		map2.put("map1", data1);
		map2.put("map2", data2);
		map2.put("map3", data3);
		map2.put("map3", data4);
		// 檢查數據
		System.out.println(map2.containsKey("map1"));
		System.out.println(map2.containsValue(data1));
		// 獲取單條數據
		System.out.println(map2.get("map1"));
		// 移除單條數據
		System.out.println(map2.remove("map2"));
		// 移除指定鍵值對
		System.out.println(map2.remove("map1", data1));
		// 遍歷所有鍵
		for (String key : map2.keySet()) {
			System.out.println(key);
		}
		// 遍歷所有的鍵值對
		for (Map.Entry<String, Map<String, String>> entry : map2.entrySet()) {
			System.out.println(entry.getKey() + " : " + entry.getValue());
		}
		// 遍歷所有的數據
		for (Map<String, String> datas : map2.getAll()) {
			for (Map.Entry<String, String> entry : datas.entrySet()) {
				System.out.println(entry.getKey() + ":" + entry.getValue());
			}
		}
		// 清空所有數據
		map2.clear();
		// 查詢總數
		System.out.println(map2.size());
		map2.destroy();
	}

}

該例子實現感謝我的同事[email protected],如果大家有遇到什麼問題,可以和他交流。

      svn地址:
      有興趣可以把JavaFramework2.5這個svn下載下來
      


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章