集合概览
数组的优点
•是Java提供的随机访问对象序列的最有效方法
•是一个简单的线性序列,访问元素的速度较快
•数组的缺点:大小自创建以后就固定了,在其整个生存期内其大小不可改变
•数组元素只能是同一类型
集合(Collection)
•可动态改变其大小
•可在序列中存储不同类型的数据
把具有相同性质的一类东西,汇聚成一个整体
•在Java2中有很多与集合有关的接口及类
•它们被组织在以Collection及Map接口为根的层次结构中,称为集合框架
•在Java2之前,在Java 1.0/1.1中,没有完整的集合框架。只有一些简单的可以自扩展的容器类
•Vector •Hashtable
简单来说,集合就是用来存储对象的容器
由来:
对象用于封装特有数据,对象多了需要存储,如果对象个数不确定,就用集合容器进行存储
特点:
- 用于存储对象的容器
- 集合长度是可变的
- 集合中不可以存储基本数据类型
针对不同用途有不同容器,依据不同的用途用不同的容器
集合容器因为内部的数据结构不同,有多种具体容器。
不断向上抽取,就形成了集合框架。
框架顶层Collection接口
常见方法:
-
添加
boolean add(Object obj);
boolean addAll(Collection coll);
public static void show(Collection coll){
coll.add("abc");
System.out.println(coll);
}
-
删除
boolean remove (Object obj);
boolean removeAll(Collection coll); //将两个集合中的相同元素从调用removeAll的集合中删除
void clear();
-
判断
boolean contains(Object obj);
boolean containsAll(Collection coll);
boolean ifEmpty();判断集合中是否有元素
-
获取
int size();
Iterator iterator();取出元素的方式:迭代器
Collection coll = new ArrayList();
coll.add("abc1");
coll.add("abc2");
Iterator it = coll.iterator();
//两种方式:
//第一种方式:
while(it.hasNext()){
System.out.println(it.next());
}
//第二种方法:
for(Iterator it = coll.iterator();it.hasNext();){
System.out.println(it.next());
}
该对象必须依赖于具体容器,因为每一个容器的数据结构不同
所以该迭代器对象是在容器内部实现的
对于容器使用者而言,具体的实现不重要,值要通过容器获取到该实现的迭代器对象即可,也就是iterator方法
Iterator接口就是对所有的Collection容器进行元素取出的公共接口
-
其他
boolean retainAll(Collection coll);取交集
Object[] toArray();将集合转成数组
常用子接口
List和Set
List
有序的collection(也称为序列),此接口的用户可以对列表中每个元素的插入位置进行精准的控制。用户可以根据元素的整数索引(在列表中的位置)访问元素,并搜索列表中的元素
与set不同,元素可以重复
特有的常见方法:
有一个共性特点就是可以增加角标
- 添加
void add(index,element);
void add(index,collection);
- 删除
- 修改
- 获取
Object get(index);
for(int i=0;i<list.size();i++){
System.out.println(list.get(i));
}
int indexOf(object);
int lastIndexOf(object);
List sublist(from,to);
在使用迭代器的时候不能进行集合操作,否则会造成并发错误
这时候我们需要使用iterator的子接口listIterator()方法,来完成迭代过程中对集合的操作
有三个常用对象:
- Vector:(内部是数组数据结构)可以实现可增长对象数组,Vector大小可以根据需要增大或缩小,以适应创建Vector后进行添加或移除项的操作
- ArrayList:内部是数组数据结构,是不同步的。替代了Vector。
- Linkedlist:内部是链表数据结构,是不同步的
Set
不包含重复元素,无序。
Map
一次添加一对元素
将键映射到对象,map集合必须保证键的唯一性
-
添加
value put(key,value);