一个快速、轻量级 Collection 库 Trove

  Trove一个快速、轻量级针对java原子类型(byte,int,float,long等)的Collection 类的集合。其官方网站:http://trove.starlight-systems.com/home。

 

据官方介绍,Trove有两个目标,其一是提供免费的、快速的、轻量级的java Collections API的一个实现。这些实现被设计为可替换对jdk集合代码的使用。其二是提供针对原子类型的集合。在jdk中主要是通过原子类型的包括类型如Integer,Long等,再配合面向对象的集合来实现。如在jdk中如果需要使用int类型的集合,一般都是int的包装类Integer结合List或者其它的集合类。在大多数应用程序中,使用存储原子类型的集合,会减少对内存的使用,同时也不会对性能带来损失。

 

最近在阅读一个开源的android项目源码时,发现其中使用到了这个库,google了一番,发现是个好东西,随记下来以备后用。

 

这写几个简单的例子:

1、支持int类型的List:TIntArrayList

 

Java代码 复制代码 收藏代码
  1. public class IntList {
  2. public static void main(String[] args) {
  3. TIntArrayList intList = new TIntArrayList();
  4. intList.add(1);
  5. intList.add(6);
  6. intList.add(3);
  7. intList.add(2);
  8.  
  9. for (int i=0;i<intList.size();i++) {
  10. System.out.println(intList.get(i));
  11. }
  12.  
  13. intList.transformValues(new TIntFunction() {
  14. @Override
  15. public int execute(int v) {
  16. return v * 2;
  17. }
  18. });
  19. System.out.println(intList.toString());
  20.  
  21. intList.sort();
  22.  
  23. System.out.println(intList.toString());
  24.  
  25. int[] arr = intList.toArray();
  26. for (int i=0;i<arr.length;i++) {
  27. System.out.println(arr[i]);
  28. }
  29.  
  30. }
  31. }
public class IntList {
	public static void main(String[] args) {
		TIntArrayList intList = new TIntArrayList();
		intList.add(1);
		intList.add(6);
		intList.add(3);
		intList.add(2);
		
		for (int i=0;i<intList.size();i++) {
			System.out.println(intList.get(i));
		}
		
		intList.transformValues(new TIntFunction() {
			@Override
			public int execute(int v) {
				return v * 2;
			}
		});
		System.out.println(intList.toString());
		
		intList.sort();
		
		System.out.println(intList.toString());
		
		int[] arr = intList.toArray();
		for (int i=0;i<arr.length;i++) {
			System.out.println(arr[i]);
		}
		
	}
}

执行结果:


1
6
3
2
{2, 12, 6, 4}
{2, 4, 6, 12}
2
4
6
12

 

通过上面的代码示例,可以发现使用方式和jdk提供的集合使用方式一致,这也许就是trove说的,可以用来替换对jdk集合的使用了。这里它还提供了一些特殊的方法,比如transformValues,这个方法可以根据你提供的TIntFunction来对TIntArrayList内部的值进行转换。比如它还支持对内部元素直接排序,以及重载了toString方法,直接返回内部的元素。

 

2、再看一个简单的支持int,int的map:

 

Java代码 复制代码 收藏代码
  1. import gnu.trove.map.TIntIntMap;
  2. import gnu.trove.map.hash.TIntIntHashMap;
  3.  
  4. public class IntMap {
  5. public static void main(String[] args) {
  6. TIntIntMap intMap = new TIntIntHashMap();
  7.  
  8. intMap.put(0, 10);
  9. intMap.put(1, 10);
  10. intMap.put(2, 20);
  11. intMap.put(3, 30);
  12.  
  13. System.out.println(intMap.get(0));
  14. System.out.println(intMap.get(1));
  15. System.out.println(intMap.get(2));
  16. System.out.println(intMap.get(3));
  17.  
  18. }
  19. }
import gnu.trove.map.TIntIntMap;
import gnu.trove.map.hash.TIntIntHashMap;

public class IntMap {
	public static void main(String[] args) {
		TIntIntMap intMap = new TIntIntHashMap();
		
		intMap.put(0, 10);
		intMap.put(1, 10);
		intMap.put(2, 20);
		intMap.put(3, 30);
		
		System.out.println(intMap.get(0));
		System.out.println(intMap.get(1));
		System.out.println(intMap.get(2));
		System.out.println(intMap.get(3));
		
	}
}

执行结果:

10
10
20
30

记得以前写代码的时候,希望能有一个支持int到int的map,但是在没有更好的选择之前,只能选择使用Integer来实现,不过以后可以使用这个库了。trove提供了int到byte,int到float,int到long等多种map。

 

暂时介绍到这了,后面有使用到再接着写!

你可能感兴趣的:(快速)