我决定,还是从基础学起!
1.ArrayList实际上应该是数组实现,所以不方便做大量的删除和添加,但是很有效与get(),set()方法
LinkedList是基于链表实现,所以不应该用作随机访问,但是add(),remove()方法很适用
2.add(),remove()方法会破坏集合的结构,所以在用两个线程访问时会出现同步问题.但是set()(改变之前访问的值)不会.
3.vector和arraylist都是基于数组实现的,它们的区别在于,vector是同步的,会消耗更多的资源,所以不需要同步时,最好使用arraylist
同样的例子还有Hashtable(同步)和HashMap
4.集合的某些操作会有boolean的返回值,该值表示是否改变了集合的结构(比如add).由此可以判断操作是否成功
5.HashSet不能存放相同的元素, 而且是无序存放的. TreeSet提供了排序的方法,可以让元素自身实现Comparable接口,或者 为TreeSet制定特殊的排序类Comparator
6. PriorityQueue提供了高效的得到最小元素的方法,这有助于实现任务调度器类似的功能
7.Map的keySet, entrySet, values可以访问和删除键值或者键名,但是不能增加.增加的话必须直接调用Map的方法.同样,Map中相同的元素只能有一个键名
8.WeakHashMap可以把map中不再需要的元素由gc回收
9.LinkedHashSet和LinkedHashMap提供了排序的方法,但是这个排序是可以控制的,accessOrder为true时是按照访问的顺序进行的,为false时是按照你的输入顺序
10.IdientityHashMap通过内存地址计算hascode,因此可以拥有相同的元素,因为它中间的比较是通过"=="而不是equals
11.Collections类提供了一系列操作Collection接口的方法和算法, 比如二分查找, 排序等等(请注意Collections和Collection的区别)
12.视图技术:
这是集合框架一项出色的技术, 对于现有集合的操作, 比如说选取子集, 由该集合产生特殊集合等等,实际上都没有创建新的集合,而是在原有集合上创建视图,该视图是实现了Collection接口的特殊实现类,用户对这些类的调用实际上还是对被其包裹的原有集合的调用, 视图实际上起到了的代理的作用
因此,视图的问题在于通过视图你有时无法调用接口的所有方法,比如List.asList(Array a)可以把数组包裹成列表,但实际上,我们的操作还是直接传到了数组之中.因此,对于这样的列表, 所有的更改结构的方法(如add, remove)都不被支持.(代测验)