对java的集合一直是停留在使用的角度,没有进行系统的归纳,趁现在比较空闲,归纳一下。
1 集合的层次关系
最顶层的有三个集合,其中一个类,两个接口, 一个类是Arrays,两个接口是Collection和Map
Arrays将数字和对象联系起来。
Collection的直接接口有List, Set,Queue。 Arraylist, Vector扩展了抽象类AbstractList,并且实现了List接口, LinkedList实现了AbstractSequentialList,并且实现了Queue和List接口。stack扩展自Vector类,set的之类有hashset和treeset, LinkedHashSet是对HashSet的扩展,同理,LinkedHashMap是对HashMap的扩展。
LinkList实现了queue接口, 所以有poll, offer等功能。ArrayList中有两个成员变量,E[]和size, LinkedList有两个成员变量,Entry header 和size, Entry就是LinkedList的节点类型,它有三个成员变量,data, Entry next, Entry previous。 两种List都有indexof, lastindexof等功能,这和String类比较相似,所以从某种意义上说,String是ArrayList类型的结构,因为都是对一个数组的封装。ArraysList默认size是10,再次扩容为上次的50%,LinkedList的header节点的previous放的是最后一个节点的节点的引用,所以也可以说LinkedList是环形链表。
Stack, Vector, HashTable都是线程安