天天看点

Java编程思想_17.容器深入研究_阅读笔记

1.容器分类
	Map:
		HashMap
		TreeMap
		ConcurrentMap(并发)
		ConcurrentHashMap(并发)
		EnumMap(enum)
	Collection:
		List:
			ArrayList
			LinkedList
			CopyOnWriteArrayList(并发)
		Set:
			HashSet
			TreeSet
			CopyOnWriteArraySet(并发)
			EnumSet(enum)
		Queue:
			PriorityQueue
			BlockingQueue

2.填充容器

3.Collection的功能方法
	add(T)
	addAll(Collection<T>)
	contains(T)
	isEmpty()
	remove(Object)
	size()
	toArray()

4.List(有序,元素可重复)
	add()
	get()
	iterator()
	
	ArrayList:	底层是数组
	LinkedList:	双向链表

5.Set(无序,元素不重复)
	HashSet:	为快速查找而设计的Set,存入HashSet的元素必须定义hashCode()
	TreeSet:	保持次序的Set,底层为树结构。使用它可以从Set中提取有序的序列。元素必须实现Comparable接口。
	LinkedHashSet:	具有HashSet的查询速度,且内部使用链表维护元素的顺序(插入的顺序)。元素也必须定义hashCode()。

6.Map(保存键值对,键唯一)
	HashMap:使用了散列码来取代对键的缓慢搜索。散列码是相对唯一的,用以代表对象的int值。hashCode是Object中方法,因此所有java对象都能产生散列码。
	TreeMap:基于红黑树的实现。查看键或者键值对时,它们会被排序,排序由Comparable决定。TreeMap特点在于所得到的结果是经过排序的。
	LinkedHashMap:类似于HashMap,但是迭代时取得键值对的顺序是其插入顺序,故而迭代更快,因为它使用链表维护内部次序。
	ConcurrentHashMap:线程安全的Map。

	HashMap---为提高查询性能---散列码(类似于主键,hashCode)----为速度而散列---散列是查询得以快速进行

7.选择接口的不同实现
	List:
		ArrayList:get(),set()快---默认首选
		LinkedList:插入和删除元素快
	Set:
		HashSet:添加查询快
		TreeSet:支持排序,迭代快
		LinkedHashSet:插入操作LinkedHashSet比HashSet代价更高,这是由维护链表所带来的额外开销引起的
	Map:
		HashMap:默认首选
		LinkedHashMap:兼顾迭代
		TreeMap:支持排序

8.Collection或Map的同步控制

	直接将新生成的容器传递给适当的“同步”方法,这样就不会有任何机会暴露出任何不同步的版本:
		Collections.synchronizedCollection(new ArrayList<String>())
		Collections.synchronizedList(new ArrayList<String>())
		Collections.synchronizedMap(new HashMap<String,String>())