java集合之trove4j高性能集合库
简介
Trove是一个java Collection集合工具类,编写程序时使用便捷、占内存少的特点,下面我们逐一介绍。
使用便捷
maven工程pom.xml文件引入所需要依赖额jar包,非maven请自行下载吧。
<!-- https://mvnrepository.com/artifact/net.sf.trove4j/trove4j --><dependency><groupId>net.sf.trove4j</groupId><artifactId>trove4j</artifactId><version>3.0.3</version></dependency>
我们打开jar包看下源码包含的所有对象,下面我们会以list为例进行代码介绍
如果我们使用原始jdk方式创建int或byte等类型的集合,那么我们通常编码如下
List<Integer> intList = new ArrayList<>();List<Byte> byteList = new ArrayList<>();其他类型不列举了
接下来使用Trove的方式看起来就比较简单了
TIntList intList = new TIntArrayList();
TByteList byteList = new TByteArrayList();
其他类型看包里吧,不列举了
重点
trove把java原生集合的范型去掉了如List<?>,而用具体的类型集合来取代如TIntList,导致类型比较多,但trove的具体类型优化后的效果要比java原生集合类要好些。
代码示例
package com.cjnserver.server1.trovecollection;import gnu.trove.iterator.TIntIterator;
import gnu.trove.list.TByteList;
import gnu.trove.list.TIntList;
import gnu.trove.list.array.TByteArrayList;
import gnu.trove.list.array.TIntArrayList;import java.util.*;/*** @Description : torve集合框架* @Author : chenjiatai* @Date: 2020-01-15 11:29*/
public class TroveCollection {public static void main(String[] args) {// trove方式的int类型listTIntList tList = new TIntArrayList();System.out.println("=====添加一些元素=====");tList.add(4);tList.add(3);tList.add(2);tList.add(1);print(tList);System.out.println("=====集合中最大值=====");System.out.println(tList.max());System.out.println("=====集合中最小值=====");System.out.println(tList.min());System.out.println("=====集合中元素求和=====");System.out.println(tList.sum());System.out.println("=====trove方式可以很方便的添加一个int数组,矮油不错哦~=====");int[] intArray = {8,7,6,5,4};tList.add(intArray);print(tList);// 判断集合是否为空boolean isEmpty = tList.isEmpty();// 是否包含指定元素boolean isContains = tList.contains(4);// 集合中元素的数量int size = tList.size();// for循环遍历集合(方式1)for (int i = 0; i < tList.size(); i++) {tList.get(i);}// 迭代器遍历集合(方式2)TIntIterator tIterator = tList.iterator();while (tIterator.hasNext()) {tIterator.next();}System.out.println("=====刪除指定索引位置的元素(索引为2)=====");tList.removeAt(2);print(tList);System.out.println("=====删除集合中出现的第一个相同元素(值为4)=====");tList.remove(4);print(tList);System.out.println("=====升序排序=====");tList.sort();print(tList);System.out.println("=====反转元素的顺序=====");tList.reverse();print(tList);System.out.println("=====指定2个索引位置,截取出一个新集合=====");TIntList tSubList = tList.subList(1,5);print(tSubList);System.out.println("=====插入元素到指定索引位置=====");tSubList.insert(1, 99);print(tSubList);System.out.println("=====替换指定索引位置的元素=====");tSubList.replace(0, 100);print(tSubList);System.out.println("=====随机打乱=====");tSubList.shuffle(new Random());print(tSubList);System.out.println("=====清空集合=====");tSubList.clear();System.out.println(tSubList.size());}/*** 打印方法* @param tList*/private static void print(TIntList tList) {TIntIterator tIterator = tList.iterator();while (tIterator.hasNext()) {System.out.print(tIterator.next() + "\t");}System.out.println();}
}
控制台输出结果如下
=====添加一些元素=====
4 3 2 1
=====集合中最大值=====
4
=====集合中最小值=====
1
=====集合中元素求和=====
10
=====trove方式可以很方便的添加一个int数组,矮油不错哦~=====
4 3 2 1 8 7 6 5 4
=====刪除指定索引位置的元素(索引为2)=====
4 3 1 8 7 6 5 4
=====删除集合中出现的第一个相同元素(值为4)=====
3 1 8 7 6 5 4
=====升序排序=====
1 3 4 5 6 7 8
=====反转元素的顺序=====
8 7 6 5 4 3 1
=====指定2个索引位置,截取出一个新集合=====
7 6 5 4
=====插入元素到指定索引位置=====
7 99 6 5 4
=====替换指定索引位置的元素=====
100 99 6 5 4
=====随机打乱=====
99 6 5 4 100
=====清空集合=====
0
Process finished with exit code 0
占内存少
public static void main(String[] args) {System.gc();long currInitUseMemory1 = Runtime.getRuntime().totalMemory() - Runtime.getRuntime().freeMemory();System.out.println("当前初始化使用的内存" + currInitUseMemory1);System.out.println("=====list占用内存对比=====");TIntList tIntList = new TIntArrayList();for (int i = 0; i < 100000; i++) {tIntList.add(i);}long currUseMemory2 = Runtime.getRuntime().totalMemory() - Runtime.getRuntime().freeMemory();System.out.println("TIntList 中增加10000个元素使用内存" + (currUseMemory2 - currInitUseMemory1));List<Integer> arrayList = new ArrayList<>();for (int i = 0; i < 100000; i++) {arrayList.add(i);}long currUseMemory3 = Runtime.getRuntime().totalMemory() - Runtime.getRuntime().freeMemory();System.out.println("ArrayList中增加10000个元素使用内存" + (currUseMemory3 - currUseMemory2));System.out.println("=====map占用内存对比=====");TIntIntMap tIntIntMap = new TIntIntHashMap();for (int i = 0; i < 100000; i++) {tIntIntMap.put(i,i);}long currUseMemory4 = Runtime.getRuntime().totalMemory() - Runtime.getRuntime().freeMemory();System.out.println("tIntIntMap中增加10000个元素使用内存" + (currUseMemory4 - currUseMemory3));Map<Integer, Integer> hashMap = new HashMap<>();for (int i = 0; i < 100000; i++) {hashMap.put(i,i);}long currUseMemory5 = Runtime.getRuntime().totalMemory() - Runtime.getRuntime().freeMemory();System.out.println("hashMap 中增加10000个元素使用内存" + (currUseMemory5 - currUseMemory4));}
控制台输出结果如下
当前初始化使用的内存3697592
=====list占用内存对比=====
TIntList 中增加10000个元素使用内存1997576
ArrayList中增加10000个元素使用内存2684352
=====map占用内存对比=====
tIntIntMap中增加10000个元素使用内存4017120
hashMap 中增加10000个元素使用内存9101744Process finished with exit code 0
从结果看出内存确实节省了不少,应该trove对存储的数据结构进行了优化或修改了算法,小伙伴们感兴趣自己研究一下,发到评论区,感谢!
java集合之trove4j高性能集合库相关推荐
- 实现Java集合迭代的高性能
版权声明:本文为博主chszs的原创文章,未经博主允许不得转载. https://blog.csdn.net/chszs/article/details/81042018 实现Java集合迭代的高性能 ...
- JAVA程序员面试题集合
JAVA程序员面试题集合 分类: 编程语言 2012-12-08 12:10 50人阅读 评论(0) 收藏 举报 1.面向对象的特征有哪些方面 (1)抽象: 抽象就是忽略一个主题中与当前目标无关的那些 ...
- JAVA基础---集合(一)--集合框架概述
为什么用集合如何合理用集合,以及如何实现的和他们的实现原理,如果搞清了对于之后学习其他知识和开发是很有大帮助性的. 什么是集合框架? 集合框架是表示和操作集合的统一体系结构.所有集合框架都包含以下内容 ...
- 在 Java 中如何加快大型集合的处理速度
什么是 Java 集合 尽管 Java 已经过了 25 岁生日,仍然是当今最受欢迎的编程语言之一.超过 100 万个网站通过某种形式在使用 Java,超过 三分之一 的软件开发人员的工具箱中有 Jav ...
- java 泛型集合 json_将泛型集合转换成分页json数据
[java]代码库package com.sunweb.util.jsonfactory; import java.util.List; import com.sunweb.util.jsonfact ...
- Java中的不可变集合介绍
不可变集合 什么是不可变集合? 不可变集合,就是不可被修改的集合. 集合的数据项在创建的时候提供,并且在整个生命周期中都不可改变.否则报错. 为什么创建不可变集合? 如果某个数据不能被修改,把它防御性 ...
- JAVA 开发规范标准(集合)
JAVA 开发规范 一.编程规约 (一)命名规约 1. [强制] 代码中的命名均不能以下划线或美元符号开始,也不能以下划线或美元符 号结束. 反例:_name / __name / $Object / ...
- java面试题集中营-02集合
由于本人要准备面试,所以更新一些常见的,自己收集的面试题 java集合框架 List Vector和ArrayList.LinkedList联系和区别?分别的使用场景 ArrayList是数组实现的, ...
- Java基础之数组与集合
Java基础之数组与集合 一.数组 二.冒泡排序算法 三.选择排序算法 四.二维数组 五.Arrays 工具 六.宠物管理系统 七.集合 Collection 八.List 九.重写 equals 方 ...
最新文章
- 权力的游戏登录显示服务器上限,权力与纷争登录不了怎么办_权力与纷争服务器连不上解决办法_玩游戏网...
- 云原生时代, Kubernetes 多集群架构初探
- 正则表达式中的字符类
- php循环输出url,PHP 输出URL的快捷方式的实现方法
- NSUInteger和NSInteger和int
- Lua中的metatable
- foxit phantom pdf 7.3_Jpeg to Pdf Converter 3000批量将图片转为PDF的方法
- FinCEN就非托管加密钱包报告规则征集意见时间将截至今日12时59分
- 蓝牙设置种常用的Intent
- Java JDK中的跳表实现
- win10 系统把装在c盘的软件移到其他盘的方法
- php连接phpmyadmin,怎么访问phpmyadmin
- oracle+rac+ogg部署,RAC环境下配置OGG同步
- php抢票程序,python并发编程多进程 模拟抢票实现过程
- SpringBoot GA/PRE/SNAPSHOT含义
- java中打印大小写字母
- 关于jsp中java代码的使用;
- 迅为IMX6ULL开发板Linux学习教程
- 强化学习初探索——Q-table 举例,附可执行Python代码
- Azkaban与Oozie详细对比
热门文章
- idea通过maven使用docker插件生成镜像并推送到harbor仓库
- 190㎡现代轻奢私宅,满屋洋溢着高级与优雅~
- 中新社、新华报业网等媒体报道腾云忆想云化IT生态,聚焦科技助力“双循环经济”数字化升级
- 用汇编语言编程的计算机
- JavaWEB(AJAX实现分页)
- git提交失败running pre-commit hook: lint-staged [33m[33m‼[33m Some of your tasks use `git add` command
- AD域用户加入域中的各个组解释
- win8: html5+css3+js
- 年轻人说“接受自己的平庸”,八成是自欺欺人
- Oracle 查询表空间及某个表的大小