1.集合框架概念:
(1)所谓的框架就是一个类库的集合。集合框架就是一个用来表示和操作集合的统一的架构,
它包含了实现结合的接口与类,可以这样理解:集合框架中提供了各种各样的容器,
每一种容器都可以操作存放数据,并提供操作容器中这些数据的相关方法。把具有共同特点的
容器再抽象出来生成一个统一的接口,让具体的容器去实现这些接口,集合框架中还提供了专门
操作容器的类。
(2)集合框架中不同的集合类有各自不同的数据结构,所以在使用中要根据应用的性能要求来选择
不同的集合类。 也就是说,每一种容器中封装的数据结构是不同的,不同的数据存放和操作数据的
性能也不同,所以在使用中要根据应用的性能要求来选择不同的集合类或者说是选择不通过的容器
(3)集合类存放在java.util包中, 今后进行程序编写时将大量使用集合类和相关接口。
(4)集合框架中主要又这些接口组成:
Iterable 迭代器接口
Collection 类集接口
List 列表接口
Set 数据集接口
Queue 队列
Map 键-值对组合映射表
Collection接口是Iterable接口的子接口, List、Set、 Queue又是Collection的子接口
SortedSet又是Set的子接口
SortedMap是Map的子接口
(5)Iterable接口和迭代器:
1)Iterable接口:
a. 实现该接口允许对象成为“foreach”语句的目标,即该集合对象允许迭代
(迭代也就是遍历访问的意思,一旦一个容器去实现了Iterable接口,那么我们就可以通过
Iterable接口中提供的方法来获取一个迭代器对象,通过这个迭代器对象就可以统一的遍历方式访问
容器中的数据,当然,容器中的数据也可以通过foreach语句来遍历)
b. 类集接口Collection是Iterable的子接口,所以所有类集对象可以迭代访问,而映射Map不行
(只要是Iterable的子接口,都可以使用迭代访问)
c. 如何得到一个迭代器对象?通过Iterable接口的iterator() 方法:
Iterator <T> iterator()
功能:返回一个在 一组T类型(泛型)的元素上进行迭代的迭代器对象
2)迭代器(迭代器对象)是实现了Iterator/ListIterator接口的类的对象,可以通过遍历类集,访问操作
其中的每个元素
3) ListIterator接口扩展了父接口Iterator,允许双向遍历集合,并可以修改和删除元素
(当一个迭代器实现了Iterator接口,它只能从集合的第一个元素访问到最后一个元素,而不能从最后一个
访问到第一个元素,但如果一个迭代器实现了ListIterator接口,就可以进行双向访问,通过 ListIterator接口
的previous()方法来实现)
(6)类集Collection接口定义的方法
Collection表示一组对象,这些对象也称为collection的元素
int size() 返回此collection中的元素个数
boolean isEmpty() 如果此collection不包含元素,则返回true
boolean contains(Object o) 如果此collection包含指定的元素,则返回true
Iterator <E> iterator()
返回对这个容器进行遍历的一个迭代器对象(返回在此collection的元素上进行迭代的迭代器对象)
Object[] toArray() 返回包含此collection中所有元素的数组
boolean add(E e) 确保此collection包含指定的元素
boolean remove(Object o) 从collection中移除指定元素的单个实例
void clear() 移除此collection中的所有元素
(7)List接口:
List接口扩展了Collection,其特点是:数据的存放是有序且可重复的,包括null,通过整数索引来访问
Set接口扩展了Collection,其特点是:无序且不可重复的
Map接口:是一个存储键值对的对象,给定一个关键字,可以查询得到它的值。
关键字和值都可以是对象。映射不是Collection的子接口,所以它本身不能使用迭代器来进行遍历
(8)List容器特点:
a. List容器是有序的collection(也称为序列)此接口的 用户可以对List容器中每个元素的
插入位置进行精确的控制,用户可以根据元素的整数索引(也就是在列表中的位置)访问元素,并搜索列表中的
元素。List容器允许插入重复的值,包括null
b. 最常用的两个List接口的实现类是ArrayList和LinkedList
********************ArrayList***********************
1) ArrayList——动态数组
2) ArrayList类扩展了AbstractList并实现了List接口 ,故List接口里有的方法,ArrayList都有
3) 支持可随需增长的动态数组(数组容量会随着数据增加而自动变化)
4) ArrayList构造方法:
ArrayList() 构造一个初始容量为10的空数组
ArrayList(Collection c) 构造一个动态数组,里边有初始数据,初始数据为传进来的Collection c的内容
ArrayList(int capacity) 创建一个指定大小的空的动态数组(存放的是对象的引用变量)
//创建一个List容器:List<String> list = new ArrayList<String>();
5) 除了继承的方法之外,ArrayList常用方法有:
E get(int index) 返回此列表中指定位置上的元素
int indexOf(Object o) 返回此列表中首次出现的指定元素的索引,或如果此列表中不包含元素,则返回-1
*******************LinkedList实现类**********************
1)LinkedList——链表 实现类的底层实际是一个链表数据结构
2)LinkedList类扩展了AbstractSequentialList并实现List接口
3)LinkedList提供了一个链表数据结构
4)LinkedList有2个构造方法:
LinkedList();
LinkedList(Collection);
5)除了继承的方法之外,LinkedList类还定义了一些有用的方法用于操作和访问容器中的数据
比如:
void addFirst(E e)
void addLast(E e)
E removeFirst()
E removeLast()