首页 > 学院 > 开发设计 > 正文

优雅编程之Trove集合工具类的7点整理学习分享(四十)

2019-11-11 05:27:04
字体:
来源:转载
供稿:网友

开心一笑

【数学期末考试有点难,一考生写的一首诗:一夜复习两茫茫,看一句,忘三行。路遇友人,脸色皆苍凉。视死如归进考场,心里慌,手中忙。考完以后心凉凉,左右曰,今比亡。查成绩,众人皆过,我独亡。】

提出问题

Trove集合库如何使用在真实的项目中???

唯美图片.png

解决问题

1.Trove集合简单介绍

trove 英[trəʊv] 美[troʊv] n. (物主不明的) 发掘出来的金银财宝;

Trove:一个快速、轻量级、针对java原子类型(byte,int,float,long等)的Collection 类的集合。废话不多说,网上资料很多~~~

2.Trove集合的maven依赖

<!-- https://mvnrepository.com/artifact/net.sf.trove4j/trove4j --><!-- trove集合框架 --><dependency> <groupId>net.sf.trove4j</groupId> <artifactId>trove4j</artifactId> <version>3.0.3</version></dependency>

3.Trove集合的具体使用

3.1支持int类型的List:TIntArrayList

跟JDK的list一样,只是TIntArrayList这个篮子可以装int类型的数字,具体使用可以看下面的例子。

@Testpublic void test(){ //申明int类型List TIntList list = new TIntArrayList(); list.add(1); list.add(3); list.add(1); list.add(4); list.add(5); list.add(2); list.add(0); //打印信息 for(int i = 0;i < list.size();i++){ System.out.PRint(list.get(i));//1314520 } System.out.println("------------------------"); //对List进行转换 list.transformValues(new TIntFunction() { @Override public int execute(int i) { //对所有数字统一乘于3 return i * 2; } }); //打印信息 for(int i = 0;i < list.size();i++){ System.out.print(list.get(i));//26281040 } System.out.println("------------------------"); //默认排序,由小到大 list.sort(); //打印信息 for(int i = 0;i < list.size();i++){ System.out.print(list.get(i) + ",");//26281040 } System.out.println("------------------------");}

3.2支持int,int的map

@Testpublic void test(){ //key 和 value 都是 int基本类型 TIntIntMap intMap = new TIntIntHashMap(); intMap.put(1, 3); intMap.put(1, 4); intMap.put(5, 2); intMap.put(0, 0); for(int key:intMap.keys()){ System.out.println(key + " : " + intMap.get(key)); }}

4.Trove的三个优势

相比jdk原生的集合类有三个优势:

1、更高的性能 2、更底的内存消耗 3、除了实现原生Collections API并额外提供更强大的功能。

5.Trove集合与传统集合性能及内存对比实例

下面的代码引用高手的文章: 获取java程序运行时内存信息

传统的集合内存消耗情况:

@Testpublic void test(){ Runtime run = Runtime.getRuntime(); System.out.println("memory> total:" + run.totalMemory() + " free:" + run.freeMemory() + " used:" + (run.totalMemory()-run.freeMemory()) ); run.gc(); System.out.println("开始时内存使用量 -> time: " + (new Date())); long startMem = run.totalMemory() - run.freeMemory(); System.out.println("memory> total:" + run.totalMemory() + " free:" + run.freeMemory() + " used:" + startMem ); //key 和 value 都是 Integer Map<Integer,Integer> map = new HashedMap(); for(int i=0;i<50000;i++){ map.put(i, i); } System.out.println("结束时内存使用量 -> time: " + (new Date())); long endMem = run.totalMemory()-run.freeMemory(); System.out.println("memory> total:" + run.totalMemory() + " free:" + run.freeMemory() + " used:" + endMem ); System.out.println("真实内存使用情况 -> memory difference:" + (endMem-startMem));}

打印结果:

memory> total:126877696 free:110287808 used:16589888开始时内存使用量 -> time: Mon Feb 06 15:07:46 SGT 2017memory> total:126877696 free:123137696 used:3740000结束时内存使用量 -> time: Mon Feb 06 15:07:46 SGT 2017memory> total:126877696 free:117288400 used:9589296真实内存使用情况 -> memory difference:5849296

Trove内存消耗情况:

@Testpublic void test(){ Runtime run = Runtime.getRuntime(); System.out.println("memory> total:" + run.totalMemory() + " free:" + run.freeMemory() + " used:" + (run.totalMemory()-run.freeMemory()) ); run.gc(); System.out.println("开始时内存使用量 -> time: " + (new Date())); long startMem = run.totalMemory() - run.freeMemory(); System.out.println("memory> total:" + run.totalMemory() + " free:" + run.freeMemory() + " used:" + startMem ); //key 和 value 都是 int基本类型 TIntIntMap intMap = new TIntIntHashMap(); for(int i=0;i<50000;i++){ intMap.put(i, i); } System.out.println("结束时内存使用量 -> time: " + (new Date())); long endMem = run.totalMemory()-run.freeMemory(); System.out.println("memory> total:" + run.totalMemory() + " free:" + run.freeMemory() + " used:" + endMem ); System.out.println("真实内存使用情况 -> memory difference:" + (endMem-startMem));}

打印结果:

memory> total:126877696 free:109727408 used:17150288开始时内存使用量 -> time: Mon Feb 06 15:04:24 SGT 2017memory> total:126877696 free:123137840 used:3739856结束时内存使用量 -> time: Mon Feb 06 15:04:24 SGT 2017memory> total:126877696 free:118912704 used:7964992真实内存使用情况 -> memory difference:4225136

传统的集合占用内存是:

真实内存使用情况 -> memory difference:5849296

Trove集合占用内存是:

真实内存使用情况 -> memory difference:4225136

6.Trove我们项目的遗憾

Trove集合确实挺好用,但是我们公司框架并未集成进来,只能看着眼馋,不知道公司的架构师有没有特别的用意。

7.Trove集合的性能建议

对于项目性能有洁癖的猿儿们,可以利用Trove集合进行性能优化

读书感悟

来自大冰《乖,摸摸头》

没人告诉过我,很多人一辈子只能遇见一次,擦肩而过就是杳然一生。没有什么过不去,只是再也回不去 哭什么哭 乖,摸摸头。不要那么孤独,请相信,这个世界上真的有人在过着你想要的生活 愿你我带着最微薄的行李和最丰盛的自己在时间流浪。情意这东西,一见如故容易,难得是来日方长的陪伴。人们懒得付出和交流,只热衷于引领和表达,微博和微信上每天都可以刷出成堆的心灵鸡汤人生感悟,无数人在转发,却不知有几人能真正做到知行合一。虽然年轻,但也知道交友不能结交不三不四的人,所以我的朋友都很二。女人容颜逝去要十年,男人贬值只在一瞬间。会心疼人的姑娘都是好姑娘。一门心思地浪迹天涯和一门心思地朝九晚五,又有什么区别呢?真牛B的话,去平衡好工作和旅行的关系,多元的生活方式永远好过狗熊掰棒子。职场女人先是进化成男人,接着是铁人,然后是超人。这个世界上的大部分传奇,不过是普普通通的人们将心意化作了行动而已。

经典故事

【师父问:如果你要烧壶开水,生火到一半时发现柴不够,你该怎么办?有的弟子说赶快去找,有的说去借,有的说去买。师父说:为什么不把壶里的水倒掉一些呢?世事总不能万般如意,有舍才有得!】

大神文章

【1】一个快速、轻量级 Collection 库 Trove 【2】开源的高性能Java集合:GNU Trove介绍 【3】Java 快速、轻量级 Collection 类的集合GNU Trove 【4】trove4j高性能Java集合库 【5】性能观察: Trove 集合类 【6】获取java程序运行时内存信息

其他

如果有带给你一丝丝小快乐,就让快乐继续传递下去,欢迎点赞、顶、欢迎留下宝贵的意见、多谢支持!


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表