基于DB4O的Java Map

基于DB4O的Java MapJava的Map是大家最常用的一个容器接口,它通过灵活的key/value结构存储数据。因为Map的简单易用很多工程师喜欢大量使用Map存放数据。但是Map的数据是存放在内存中,大量的数据存在内存中,不只是造成Java系统内存遍历慢的隐忧,更加可能系统内存溢出。针对这个问题,我们重新利用DB4O实现Map的接口,利用DB4O的对象高效的物理存储特性来减轻Java的内存压力。

大家好,又见面了,我是你们的朋友全栈君。



Java的Map是大家最常用的一个容器接口,它通过灵活的key/value结构存储数据。因为Map的简单易用很多工程师喜欢大量使用Map存放数据。但是Map的数据是存放在内存中,大量的数据存在内存中,不只是
造成Java系统内存遍历慢的隐忧,更加可能
系统内存溢出。
针对这个问题,我们重新利用DB4O实现Map的接口,利用DB4O的对象高效的物理存储特性来减轻Java的内存压力。
        大概逻辑图如下:
基于DB4O的Java Map


操作例子

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地址:
      有兴趣可以把JavaFramework2.5这个svn下载下来
      


版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

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

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • tabnine pro 激活码【中文破解版】

    (tabnine pro 激活码)2021最新分享一个能用的的激活码出来,希望能帮到需要激活的朋友。目前这个是能用的,但是用的人多了之后也会失效,会不定时更新的,大家持续关注此网站~IntelliJ2021最新激活注册码,破解教程可免费永久激活,亲测有效,下面是详细链接哦~https://javaforall.net/100143.html…

    2022年3月27日
    56
  • oracle insert select语句

    oracle insert select语句oracleinsertselect语句

    2022年7月17日
    24
  • UE4(虚幻4)引擎下载与安装「建议收藏」

    UE4(虚幻4)引擎下载与安装「建议收藏」一.官网下载epic平台1.首先,在百度搜索UE4或者虚幻4,进入官网传送门<–戳这里2.右上角有一个下载按钮3.点击后会让你选择一个许可类型,如果是做游戏就选第一个(发行者许可)4.选完之后会提醒你登录,或者你可以在主页下载旁边的按钮提前登录,如果没有账号,点击下方注册(可能会很慢,或者黑屏,稍微等一等就好了)5.tip:我注册或者登录的时候…

    2022年10月5日
    3
  • MyBatis常用对象SqlSessionFactory和SqlSession介绍和运用

    MyBatis常用对象SqlSessionFactory和SqlSession介绍和运用前言:学习框架一个比较好的路径阅读源码.本文介绍的SqlSessionFactory和SqlSession.可以通过了解SqlSessionFactory接口和SqlSession接口以及两个的实现类入手,去看源码了解实现过程.最好能把项目下载到本地,慢慢分析实现过程.Myabtis官网:http://www.mybatis.org/github地址:https://github.com/myb

    2022年4月28日
    63
  • 计算机软件师社会需求,java软件工程师的社会环境如何?「建议收藏」

    计算机软件师社会需求,java软件工程师的社会环境如何?「建议收藏」计算机专业成功的改变了很多人的命运,很多人选择计算机培训后拥有了很体面的工作,拥有了很高的工资待遇,整个人的生活水平方面了质的改变。所以越来越多的人希望可以学习计算机,而在专业选择的过程中,JAVA专业吸引到很多求学者的关注。在对JAVA这个专业了解的过程中,JAVA软件工程师的社会环境成为了很多求学者希望了解的内容,这样才能够对这个专业具有更加全面的了解。社会的地位引起关注从JAVA专业成功就业…

    2022年9月23日
    3
  • linux udp端口怎么打开_debian防火墙开放端口

    linux udp端口怎么打开_debian防火墙开放端口iptables是linux下的防火墙,同时也是服务名称。那么你知道Linux防火墙怎么开放端口么?接下来是小编为大家收集的Linux防火墙开放端口,欢迎大家阅读:Linux防火墙开放端口serviceiptablesstatus查看防火墙状态serviceiptablesstart开启防火墙serviceiptablesstop关闭防火墙serviceiptablesres…

    2025年11月21日
    2

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号