( 只是个想法加雏形,实现的很丑陋且效率很低下)
有这样一种场景,校验千万行文本中某一列键值(长度30以上)的唯一性(要求100%准确)。按我的水平,自然就想到用HashMap,可这样就会将所有的键值都放入内存,对内存资源需求较大。然后我就想,数据库也有一样的需求呀,人家怎么搞的呢?思前想后,能力太有限,没思路。最后只能想到,如果把HashMap的存储介质由内存转移到外存(文件中),貌似会节省相当部分的内存(此假设未经证实)。于是着手改造,HashMap实现的主要算法基本了解只是对于寻址那块要从内存转入文件,这是关键。由此做了如下设计:
HashMap的put方法中:
由hashcode算出在table中的位置i,然后以table[i]为链首存储元素。
我的思路:
建一个索引文件,每个索引的结构:数据项+后继索引位置。索引长度:数据项长度+long型的长度(8字节)
table[i]即链首的位置 = i * 数据项长度+8
当首次写入链首时,索引位置埴0,因为下一个元素未知嘛。
当table[i]第n个元素写入时,从链首开始遍历(取后继索引位置,跳转至该位置),直到遍历索引位置为0的链表元素,将要写入第n个元素的文件位置记到此后继索引位置,并将第n个元素写入文件。如果遍历时发现,当前元素数据项与要写入元素的数据项值相同,则发现重复元素。
目前的问题:
1. io操作过多,考虑是不是可以通过内存映像文件来提高提高效率。当然加加cache也行,就是没考虑好怎么加。
2. 还木有想到。。。
上传了我丑陋的代码,运行FileMap就好。
试用了一下jdbm-2.0.jar这个包,100万行数据插入,就是从1到100万,10行一提交。共用了38秒。使用内存14M左右,太NB。严重鄙视我提交的烂代码。
分享到:
相关推荐
hashmap源码 Table Of Contents day01_JAVA语言概述与基本语法:标识符、变量也变量分类、源码_反码_补码、进制转换、编码与字符集 day02_基本语法.运算符:算术运算符、赋值运算符、比较运算符、逻辑运算符、位...
JadePool3.0的主要变化是: 1、支持JTA分布式事务; 2、调整了DbCenter实例; 3、优化了键值生成器方法,并做了高并发性能测试;...JadePool3.0除了具备了简洁、高效、智能化的特性之外,还具备高并发性、高稳定性。
hashmap源码 oa系统 办公自动化项目。进行到知识管理。 1. 框架整合 1.1 整合主要步骤 使用java7,建立maven项目,配置pom文件。 建三个src folder src.main.java 存放源代码的 com.stillcoolme.oa.struts2.action ...
hashmap源码 JVM (1)基本概念 JVM是可运行Java代码的假想计算器,包括一套字节码指令集、一组寄存器、一个栈、一个垃圾回收、堆和一个存储方法域。JVM是运行在操作系统之上,它与硬件没有直接的交互。 (2)运行...
如果写文本文件,推荐使用PrintWriter,当创建好PrintWriter对象后,调用其println和print方法可以将字符串一行行的写入到文本文件,使用方法与System.out.println, System.out.print完全一样 具体使用方法,请见...
2. 读取和写入文本文件:展示了如何使用文件读取器和写入器来读取和写入文本文件的内容。 3. 使用日期和时间类:演示了Java 8中日期和时间类的用法,包括获取当前日期和格式化日期时间。 4. 实现链表数据结构:展示...
springmvc框架加redis集成,redis直接在配置文件配置即可使用,实现了string,list,hashmap以及对象存储,将对象序列化成二进制格式存储,取出将二进制反序列化,代码有描述及例子
),在BankBusiness文件夹中有个Account.txt文件用来存储账户信息(里头是乱码,因为是HashMap对象序列化而来)。其中包含四个类: 1、Bank(银行)。2、BankCardManage(银行管理)。3、BankMain(程序入口)。4、Card (银行卡...
1、Spring主要两个作用:实例化Bean,动态装配Bean。并将所有的bean放到spring容器中,调用时从容器中取。Spring容器就是一个bean的Map:private Map, Object> beans = new HashMap, Object>(); 2、本工程,模拟...
(1) Master最好不要做任何持久化工作,如RDB内存快照和AOF日志文件 (2) 如果数据比较重要,某个Slave开启AOF备份数据,策略设置为每秒同步一次 (3) 为了主从复制的速度和连接的稳定性,Master和Slave最好在同一个...
递归算法之输出某个目录下所有文件和子目录列表 泛型中extends和super的区别 内部类的理解 深入理解Java的反射机制 深入理解Java异常体系 谈谈NIO的理解 谈一谈对JUC的理解 ArrayList的底层原理 HashMap的底层原理 ...
2 在MainApplication中初始化 HttpManager.init(this, UrlConfig.BASE_URL); HttpManager.getInstance().setOnGetHeadersListener(new HttpManager.OnGetHeadersListener() { @Override public Map getHeaders() {...
递归算法之输出某个目录下所有文件和子目录列表 泛型中extends和super的区别 内部类的理解 深入理解Java的反射机制 深入理解Java异常体系 谈谈NIO的理解 谈一谈对JUC的理解 ArrayList的底层原理 HashMap的底层原理 ...
用户可以加载一个文本文件,然后程序将查看文本文件,并允许用户通过使用 HashMap 来查看哪些段落包含特定的单词,该 HashMap 包含一个包含段落的 ArrayList,其中的值为特定的段落用户输入的词。 当程序结束时,将...
如何将数值型字符转换为数字(Integer,Double) 如何将数字转换为字符 如何取小数点前两位,并四舍五入。 4.日期和时间 如何取得年月日,小时分秒 如何取得从1970年到现在的毫秒数 如何获取某个日期是当月的...
hashmap的底层原理 hashmap产生死锁的原因 hashmap的容量为什么一定要是2的幂呢 TreeMap的底层原理 HashMap,Hashtable和ConcurrentHashMap的区别 在ArrayList和LinkedList尾部添加元素,谁的效率更高 如果HashMap或者...
FileInputStream、FileOutputStream、BufferedReader、BufferedWriter等:用于进行文件和流的输入输出操作,可以读取、写入文件和处理数据流。 字符串处理类: String、StringBuffer、StringBuilder等:用于处理...
对第2维的格式化(即列数据),通过实现PageCol接口,已经有javabean和hashmap两种的格式化 import com.miphone.newcard.source.*; import java.util.*; 1.ArrayList source=.......; //不需要转化 2....
自动将 Java 集合转换为 python 集合( HashMap => dict、 ArrayList => list 等) 要求 Python >= 2.6,但 < 3.0(正在移植到 3.0) Maven 2+(用于构建序列化对象的测试数据。如果您不打算运行tests.py,可以...
方法封装和模块化设计:将不同功能的代码块封装成方法,提高了代码的可读性和可维护性。例如menu()方法用于显示主菜单,main()方法是程序的入口,各个case语句对应不同的功能。 数据封装:类中使用私有属性和公共的...