简介

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高性能集合库相关推荐

  1. 实现Java集合迭代的高性能

    版权声明:本文为博主chszs的原创文章,未经博主允许不得转载. https://blog.csdn.net/chszs/article/details/81042018 实现Java集合迭代的高性能 ...

  2. JAVA程序员面试题集合

    JAVA程序员面试题集合 分类: 编程语言 2012-12-08 12:10 50人阅读 评论(0) 收藏 举报 1.面向对象的特征有哪些方面 (1)抽象: 抽象就是忽略一个主题中与当前目标无关的那些 ...

  3. JAVA基础---集合(一)--集合框架概述

    为什么用集合如何合理用集合,以及如何实现的和他们的实现原理,如果搞清了对于之后学习其他知识和开发是很有大帮助性的. 什么是集合框架? 集合框架是表示和操作集合的统一体系结构.所有集合框架都包含以下内容 ...

  4. 在 Java 中如何加快大型集合的处理速度

    什么是 Java 集合 尽管 Java 已经过了 25 岁生日,仍然是当今最受欢迎的编程语言之一.超过 100 万个网站通过某种形式在使用 Java,超过 三分之一 的软件开发人员的工具箱中有 Jav ...

  5. java 泛型集合 json_将泛型集合转换成分页json数据

    [java]代码库package com.sunweb.util.jsonfactory; import java.util.List; import com.sunweb.util.jsonfact ...

  6. Java中的不可变集合介绍

    不可变集合 什么是不可变集合? 不可变集合,就是不可被修改的集合. 集合的数据项在创建的时候提供,并且在整个生命周期中都不可改变.否则报错. 为什么创建不可变集合? 如果某个数据不能被修改,把它防御性 ...

  7. JAVA 开发规范标准(集合)

    JAVA 开发规范 一.编程规约 (一)命名规约 1. [强制] 代码中的命名均不能以下划线或美元符号开始,也不能以下划线或美元符 号结束. 反例:_name / __name / $Object / ...

  8. java面试题集中营-02集合

    由于本人要准备面试,所以更新一些常见的,自己收集的面试题 java集合框架 List Vector和ArrayList.LinkedList联系和区别?分别的使用场景 ArrayList是数组实现的, ...

  9. Java基础之数组与集合

    Java基础之数组与集合 一.数组 二.冒泡排序算法 三.选择排序算法 四.二维数组 五.Arrays 工具 六.宠物管理系统 七.集合 Collection 八.List 九.重写 equals 方 ...

最新文章

  1. 权力的游戏登录显示服务器上限,权力与纷争登录不了怎么办_权力与纷争服务器连不上解决办法_玩游戏网...
  2. 云原生时代, Kubernetes 多集群架构初探
  3. 正则表达式中的字符类
  4. php循环输出url,PHP 输出URL的快捷方式的实现方法
  5. NSUInteger和NSInteger和int
  6. Lua中的metatable
  7. foxit phantom pdf 7.3_Jpeg to Pdf Converter 3000批量将图片转为PDF的方法
  8. FinCEN就非托管加密钱包报告规则征集意见时间将截至今日12时59分
  9. 蓝牙设置种常用的Intent
  10. Java JDK中的跳表实现
  11. win10 系统把装在c盘的软件移到其他盘的方法
  12. php连接phpmyadmin,怎么访问phpmyadmin
  13. oracle+rac+ogg部署,RAC环境下配置OGG同步
  14. php抢票程序,python并发编程多进程 模拟抢票实现过程
  15. SpringBoot GA/PRE/SNAPSHOT含义
  16. java中打印大小写字母
  17. 关于jsp中java代码的使用;
  18. 迅为IMX6ULL开发板Linux学习教程
  19. 强化学习初探索——Q-table 举例,附可执行Python代码
  20. Azkaban与Oozie详细对比

热门文章

  1. idea通过maven使用docker插件生成镜像并推送到harbor仓库
  2. 190㎡现代轻奢私宅,满屋洋溢着高级与优雅~
  3. 中新社、新华报业网等媒体报道腾云忆想云化IT生态,聚焦科技助力“双循环经济”数字化升级
  4. 用汇编语言编程的计算机
  5. JavaWEB(AJAX实现分页)
  6. git提交失败running pre-commit hook: lint-staged [33m‼ Some of your tasks use `git add` command
  7. AD域用户加入域中的各个组解释
  8. win8: html5+css3+js
  9. 年轻人说“接受自己的平庸”,八成是自欺欺人
  10. Oracle 查询表空间及某个表的大小