完整的容器分类
填充容器:
* 使用Generator填充
public class CollectionData<T> extends ArrayList<T>{
public CollectionData(Generator<T> gen, int q){
for(int i=0; i<q; i++){
add(gen.next());
}
}
}
public static <T> CollectionData<T> list(Generator<T> gen, int q){
return new CollectionData<T>(gen. q);
}
* 使用泛型方法减少在创建MapData类对象时必须的类型检查数量(利用自动类型推断);
public class MapData<K, V>{
public MapData(){
//...;
}
public MapData(K key, V value){
//...;
}
public static <K, V> Map<K, V> map(){
return MapData<K, V>();
}
public static <K, V> MapData<K, V> map(K key, V value){
return new MapData<K, V>(key, value);
}
}
MapData<String, Integer> map=MapData.map();
MapData<String, Integer> map=MapData.map(String, Interger);
* 匿名内部类实现Iterator;
* 享元:使得对象的一部分可以被具体化,可以在更加高效的外部表中查找对象的一部分或整体;
利用索引,减少直接对大量数据的直接调用;
Collenction的功能方法,Set,List:
* Object [] toArray();
* Arrays.asList()会生成一个List,它基于一个固定大小的数组,仅支持哪些不会改变数组大小的操作;任何会引起对底层数据结构的尺寸进行修改的方法都会产生一个UnsupportedOperationException异常;应该把Arrays.asList()的结果作为构造器的参数传递给Collection使用;
* Arrays.asList()与unmodifiableList()区别;
Set和存储顺序:
* HashSet,无序;
* LinkedHashSet,以插入顺序存储,需要equals()和hashCode();
* TreeSet,以降/升序存储,实现了Comparable接口;
* SortedSet,Comparator comparator();TreeSet是该接口的唯一实现;
队列:
LinkedList,PriorityQueue;
* 优先级队列;双向队列;
Map:
HashMap,TreeMap(红-黑树实现,有submap(),可以返回某个子树),LinkedHashMap,WeadHashMap,ConcurrentHashMap,IdentityHashMap;效率,键值对的保存,呈现次序,对象的保存周期,映射表,判定“键”等价的策略方面不同;
* 性能;散列吗,相对唯一,加快搜索,可以使用质数也可以2的整数次,克服求余的复杂性;
* WeakHashMap允许释放映射所指向的对象;如果映射之外没有引用指向某个“键”,则此“键”可以被垃圾回收器回收;
* ConcurrentHashMap线程安全的Map;
* IdentityHashMap用==代替equals(),对键进行比较;
* 如果键被用于散列Map,必须具有恰当的hashCode()方法;被用于TreeMap,必须实现Comparable;
* keySet()返回由Map的键组成的Set();keySet(),valueSet()和entrySet()产生的Set会与原Map相关联,原Map的改动会反映的keySet()上;
* LinkedHashMap可以采用基于访问的LRU(最近最少使用)算法;
* 保持键的排序状态,然后使用Collections.binarySearch()进行查询;
* HashMap的性能,容量,负载因子默认0.75;再散列;
* 首先按照实际类型排序的CompareTo();
* ArrayList底层由数组支持,随机存取速度快;LinkedList由双向链表实现,经常的插入删除;
* HashSet最常用,查询速度最快;LinkedHashSet保持元素插入顺序;TreeSet基于TreeMap,总是处于排序状态;
* 性能测试,需要认真学习;
* CopyOnWriteArrayList是List一个专用于并发编程的实现;
* 微基准的测试
java.lang.Collections的方法:P512
unmodifiable...
Sychronized...