一、集合的概念
Java中的集合类统一封装在java.util包中,是一个用来存放对象的容器。
1、集合只能存放对象。如果存入基本数据类型,集合会将其自动转换成其封装类存入,Java中每一种基本数据类型都有对应的引用类型;
2、集合存放的对象的引用,而非对象本身。所以我们称集合中的对象就是集合中对象的引用。对象本身还是放在堆内存中。
3、集合可以存放不同类型,不限数量的数据类型。
1.1、集合的两大的部分:
1、集合主要分为Collection接口和Map接口;
2、Collection接口分别被Queue、List和Set三个接口继承;
3、List接口被AbstractList实现,分为三个子类:LinkedList、ArrayList、Vector; 元素按进入先后有序保存,可重复,元素有序 ;
4、Set接口被AbstractSet实现,分为两个子类:HashSet、TreeSet;仅接收一次,不可重复,元素无序 ;
5、Map接口被AbstractMap实现,分为两个子类:HashMap、TreeMap;
6、Map接口被HashTable实现。
1.2、集合和数组的区别
二、Collection接口
Collection是一个高度封装的集合接口,继承自Iterable接口,它提供了所有集合要实现的默认方法。由于Iterable封装了Iterator迭代器,因此Collection可以使用Iterator迭代器。
Collection分别有Queue、List及Set三个子接口,一个AbstractCollection抽象类。由于Collection接口没有可用的实现类,所以在使用Collection时,必须使用它的子类或子接口。
2.1、List
2.1.1、List接口有如下特点:
- 有序的集合。存储顺序和获取元素的顺序都是一致的;
- 可重复。允许存储重复的元素;提供索引。
- 提供一些索引的方法,供用户操作。
List接口下有4个实现类,分别为:LinkedList、ArrayList、Vector和Stack。
2.1.2、ArrayList
2.2、Set
三、Map接口
四、Iterator迭代器
4.1、Iterator接口是Java中集合的顶层接口。(不包含Map系列接口,Map接口是Map系列集合的顶层接口)。
三个方法:
1、Object next():返回迭代器刚越过元素的引用,返回值是Object,需要根据需要强制转换;
2、boolean hashNext():判断迭代器中是否还有供访问的元素;
3、void remove():删除迭代器中越过的元素。
除了Map集合系列,程序都可以通过Iterator迭代器来遍历集合中的元素。
4.2、Iterator与Iterable
Iterable接口封装在java.util包中,
public interface Iterable<T>{
/**
* Returns an iterator over elements of type {@code T}
*
* @return an Iterator
*/
Iterator<T> iterator();
...
}
从上面代码可以看出,Iterable接口封装了Iterator接口,所以只要子类实现了Iterable接口,就可以使用Iterator迭代器的功能了。
4.3、ListIterator接口
由于Iterator值提供了next()、hashNext()、remove()功能,如果我们想在使用迭代器遍历的同时添加元素,该怎么办呢?
这里提供两种方式:
1、自定义接口或者实现类,实现Iterator接口,在自定义实现类或接口中添加相应的功能;
2、使用Iterator的子接口ListIterator
、remove()功能,如果我们想在使用迭代器遍历的同时添加元素,该怎么办呢?
这里提供两种方式:
1、自定义接口或者实现类,实现Iterator接口,在自定义实现类或接口中添加相应的功能;
2、使用Iterator的子接口ListIterator