我在Java中有一个词干算法,它需要一个静态的最终HashMap< String,String>预先填写了大约30 000条记录.
我需要地图按照插入的顺序保存记录(我得到一个提示,我可以使用LinkedHashMap?).
我以为我可以在Java类文件中手动插入值,因为这是在RAM中加载它们的最快方法(时间/生产力对于这个项目非常重要),通过使用30 000个调用
map.put("Key", "Value");
问题是,java(或至少eclipse)在任何段/方法等中只允许65kb的代码.所以我最终扩展了11个类,并在构造函数或静态{}中放入65kb的.put.
一切都很好,但是当我运行它时,订单就被打乱了.对于这么多行,我无法在扩展顺序或地图中跟踪出错的地方.
那么,请告诉我你在java中填写最终地图的最佳方式是什么.
P.S.:从文件加载和解析记录太慢了……
解决方法:
Everything was fine, but when I run it the order is scrambled. For so
many rows I cannot track where did things go wrong, in the extending
order or in the map.
a)HashMap不保留插入顺序.请改用LinkedHashMap.
或者,因为你将它用作常量,考虑一个Guava ImmutableMap.它保留插入oder,是不可变的,并提供一个构建器对象,用于构造具有许多值的构造对象.
b)
P.S.: Loading the records from a file is far too slow…
为什么?在课堂加载期间,它只会完成一次. 35K字符串/字符串对实际上并不是现代机器的大量数据.
标签:java,hashmap,initialization,map
来源: https://codeday.me/bug/20190729/1574268.html