前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >基于DB4O的Java Map

基于DB4O的Java Map

作者头像
全栈程序员站长
发布2022-09-13 21:42:17
2230
发布2022-09-13 21:42:17
举报

大家好,又见面了,我是你们的朋友全栈君。 Java的Map是大家最常用的一个容器接口,它通过灵活的key/value结构存储数据。因为Map的简单易用很多工程师喜欢大量使用Map存放数据。但是Map的数据是存放在内存中,大量的数据存在内存中,不只是 造成Java系统内存遍历慢的隐忧,更加可能 系统内存溢出。

针对这个问题,我们重新利用DB4O实现Map的接口,利用DB4O的对象高效的物理存储特性来减轻Java的内存压力。

操作例子

代码语言:javascript
复制
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();
	}

}

该例子实现感谢我的同事qun1988@gmail.com,如果大家有遇到什么问题,可以和他交流。

svn地址:

http://code.google.com/p/ken-javaframeword/source/browse/trunk/JavaFramework2.5/src/com/shine/framework/DB4o/example/DB4oMapExample.java

有兴趣可以把JavaFramework2.5这个svn下载下来

http://code.google.com/p/ken-javaframeword/source/browse/trunk/JavaFramework2.5

发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/162614.html原文链接:https://javaforall.cn

本文参与?腾讯云自媒体分享计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客?前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与?腾讯云自媒体分享计划? ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
对象存储
对象存储(Cloud Object Storage,COS)是由腾讯云推出的无目录层次结构、无数据格式限制,可容纳海量数据且支持 HTTP/HTTPS 协议访问的分布式存储服务。腾讯云 COS 的存储桶空间无容量上限,无需分区管理,适用于 CDN 数据分发、数据万象处理或大数据计算与分析的数据湖等多种场景。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
http://www.vxiaotou.com