一 基本数据结构
可变数组 Vector 堆栈 Stack 队列(接口)Queue 以及它的许多子类(并发包)
List(LinkList、ArrayList) Set(HashSet、TreeSet) Map(HashMap、TreeMap)
二 集合框架
Java Collections Framework位于包java.util.*中,有两个顶层接口,Collection与Map接口。
1.Collection结构(图1-1 && 图1-2),Map结构(图1-3)
图1-1
图1-2
图1-3
2.为什么要使用接口
如果不用接口,而使用类似ArrayList的具体类方法直接实现,那被人称之为硬代码。
接口提供一些类似的行为,实现动态可插入,也就是说能够动态的决定使用哪一种实现。
Collections.sort(List<T>,list),不管是ArrayList,还是Vector,或是LinkList,只要继承List接口,就可以调用它。
3.为什么用Collection接口,而不用AbstractCollection直接代替接口
“能够用接口就不要用聚合或集合,能够用聚合或集合就不要用继承。”是一位属于企业领导阶层的人在我校做兼职老师时说的。但就我能理解到的程度是:如果一个类除了必须继承AbstactCollection,还必须继承其他的类(OtherClass),但Java不支持双继承,这就导致AbstactCollection先必须继承OtherClass,这就出现了两个问题:第一,OtherClass很可能与AbstactCollection没有Has-a的关系,使用继承是错的,逻辑混乱。第二,即使有Has-a关系,但其他继承AbstactCollection的类无需用到OtherClass,这也导致逻辑混乱。
4.AbstractCollection的用途
AbstactCollection实现了接口Collection的部分通用功能(即所有子类可共用的代码),减少了编程量。它使用了缺省适用模式,如果不用AbstractCollection,而用一个具体的类实现接口,那么具体类就必须实现接口的所有函数,即使不实现,也要给出一个空的方法,这很不方便。
三 各种数据结构的比较
数组 堆 堆栈 队列 链表 树
HashTable 和 HashMap 、 Vector 和 ArrayList
List(LinkList、ArrayList) Set(HashSet、TreeSet) Map(HashMap、TreeMap)
四 HashSet与HashMap负载因子 HashMap、HashSet的遍历 以及 排序
五 JDK 并发包中的新数据结构 和 开源的集合包
1. java.util.concurrent
2. Commons-Primitives、 Commons-Collections