一、单列集合框架的使用
集合的学习需要重点掌握集合的特点和集合的使用方法。集合分为单列集合和双列集合。
单列集合的顶级接口为Collection接口。List接口和Set接口继承Collection接口。
List接口的实现类有三个:ArrayList、LinkedList、Vector
ArrayList | LinkedList | Vector |
1.元素有序 2.元素可重复 3.有索引 4.线程不安全 5.底层数据结构:数组 | 1.元素有序 2.元素可重复 3.有索引 4.线程不安全 5.底层数据结构:双向链表 | 1.元素有序 2.元素可重复 3.有索引 4.线程安全 5.底层数据结构:数组 |
LinkedList本质上无索引,但是java为其提供了很多根据索引操作元素的方法。
Set接口的实现类有三个:HashSet、LinkedHashSet、TreeSet
HashSet | LinkedHashSet | TreeSet |
1.元素无序 2.元素唯一 3.无索引 4.线程不安全 5.底层数据接口:哈希表 | 1.元素有序 2.元素唯一 3.无索引 4.线程不安全 5.底层数据接口:哈希表+双向链表 | 1.可对元素进行排序 2.元素唯一 3.无索引 4.线程不安全 5.底层数据结构:红黑树 |
LinkedHashList继承HashSet。
二、Collection接口的使用
1. 概述:单列集合的顶级接口
2. 使用
a. 创建:Collection<E> 对象名 = new 实现类对象<E>()
b. <E>泛型,决定了集合中能存储什么类型的数据,可以统一元素类型。泛型中只能写引用数据类型,如果不写,默认object类型,此时什么类型的数据都可以存储。
c. 泛型细节:等号前面的泛型必须写,等号后面的泛型可以不用写。jvm会根据前面的泛型推导出后面的泛型。
3. 常用方法
boolean add (E e);//将给定的元素添加到当前集合中
boolean addAll(Collection<? extends E> c);//将另一个集合元素添加到当前集合中
void clear();//清除集合中所有的元素
boolean contains(Object o);//判断当前集合中是否包含指定的元素
boolean isEmpty();//判断集合是否为空
boolean remove(Object o);//将指定的元素从集合中删除
int size();//返回集合中的元素个数
Object[] toArray();//把集合中的元素,存储到数组中
三、迭代器
1.迭代器基本使用
1.主要作用:遍历集合
2.获取:Collection中的方法:
Iterator<E> iterator()
3.方法:
boolean hasNext();//判断集合中有没有下一个元素
E next();//获取下一个元素
public static void main(String[] args) {
ArrayList<String> list = new ArrayList<String>();
list.add("Hyunjin");
list.add("Felix");
list.add("hello");
Iterator<String> iterator = list.iterator();
while (iterator.hasNext()){
String next = iterator.next();
System.out.println(next);
}
}
2.迭代器迭代过程
int cursor;//下一个元素索引位置
int lastRet=-1;//上一个元素索引位置
hashNext()判断下一个位置是否还有元素,若有,就可以使用next()获取那个元素。
3.迭代器底层原理
1.获取Iterator的时候怎么获取的:
Iterator iterator=list.iterator()
我们知道Iterator是一个接口,等号右边一定是它的实现类对象。
问题:Iterator接受的到底是哪个实现类对象呢? ArrayList中的内部类Itr对象
注意:只有ArrayList使用迭代器的时候Iterator接口才会指向Itr,其他的集合使用迭代器Iterator就指向的不是Itr了。例如HashSet: