package org.springside.modules.utils.collection;
import java.util.List;
import org.apache.commons.collections4.keyvalue.MultiKey;
import org.apache.commons.collections4.list.SetUniqueList;
import org.apache.commons.collections4.list.TreeList;
import org.apache.commons.collections4.map.AbstractHashedMap;
import org.apache.commons.collections4.map.Flat3Map;
import org.apache.commons.collections4.map.MultiKeyMap;
/**
* 使用CommonCollections中的扩展类型
*
* 参考pom.xml, 引入apache Commons Collections4依赖
*
* @author calvin
*/
public class CommonCollections {
/**
* 联合多个Key来定位Value的HashMap.
*
* 普通HashMap,需要将多个Key拼装成一个字符串作为主键,因此MultiKeyMap尤其适合于这几个Key的类型不是String时.
*
* @param map 被包裹的底层HashMap,可先定义HashMap的初始大小和加载因子,可使用类型为LinkedMap
*/
public static <K, V> MultiKeyMap<K, V> multiKeyMap(final AbstractHashedMap<MultiKey<? extends K>, V> map) {
return MultiKeyMap.multiKeyMap(map);
}
/**
* 创建性能与访问速度更优的微型Map
*
* 当Map的元素个数<=3时,直接使用key1,key2,key3属性,节约空间与加快速度. 当Map的元素个数>3时,自动创建真正的HashMap
*/
public static <K, V> Flat3Map<K, V> flat3Map() {
return new Flat3Map<K, V>();
}
/**
* 队列内元素唯一的List, 内部集成了一个HashSet来实现.
*
* @param list 被包裹的底层List,可先定义ArrayList的初始长度等.
*/
public static <E> SetUniqueList<E> setUniqueList(final List<E> list) {
return SetUniqueList.setUniqueList(list);
}
/**
* ArrayList 与 LinkedList的折衷版
*
* ArrayList 随机访问快,当非末尾的插入删除慢. LinkedList的插入删除快,但非两端的操作都需要遍历链表到达指定下标.
*
* TreeList是内部结构为TreeNode的Linked List, 与Linked相仿,但能更快的到达指定下标.
*/
public static <E> TreeList<E> treeList() {
return new TreeList<E>();
}
}