Java核心技术——集合

时间:2022-10-15 22:10:59
一、集合接口
1.集合类型都是泛型类,集合类的基本接口是Collection和Map
2.Collection接口扩展了Iterable接口,对于标准类库中的任何集合都可以使用“for each”循环
3.使用Iterator遍历集合时,调用remove之前必须先调用next
4.AbstractCollection<E>类实现在Collection接口,它将基础方法size和iterator抽象化了,此时,一个具体的集合类可以继承AbstarctCollection类,并提供size和iterator方法


二、具体集合
1.Java中,所有链表实际上都是双向连接的
2.LinkedList类是一个用链表实现的集合类,他实现了List接口
3.ListIterator<E>接口有add方法:在迭代器的位置插入元素。也有previous方法:迭代器后退一步,返回前一个元素
4.可以将Iterator理解为指向集合元素间的空隙,调用一个next就跨过一个元素,相应的操作也是对该元素进行。因此Iterator对象一开始指向的是一个开始的标志位,在执行next方法后才指向第一个元素
5.Vector类的所有方法都是同步的,可以由两个线程安全地访问一个Vector对象,而ArrayList方法不是同步的,效率更高
6.Hashtable的方法是同步的,线程安全的,HashMap是Hashtable的轻量级实现,没有考虑线程安全
7.散列表(Hash Set)将数据分散到几个子表(bucket)中存放,查找元素时可以快速定位元素所在的子表,然后在子表内查找
8.Set和List一样,是另一个继承自Collection的集合接口,Set不包含重复元素,是无序的
9.树集(Tree Set)自动将元素顺序插入,效率比散列表低,比数组和链表高。树集需实现Comparable<T>接口,并实现对“int compareTo”方法的实现,或者将Comparator对象传递给TreeSet构造器


三、集合框架
1.Java的集合分为两类:一是Map,以key/value的方式管理集合,使用key来进行集合元素的管理检索;二是Collection,分为三种:List是一个元素有顺序的列表,Set是元素不能重复的集合,Queue是队列性的集合
2.框架为上层功能的建立定义了一个基础架构,这个基础架构以一组超类或者接口作为载体定义出来,并提供了相应的辅助类、公共类和基础类
3.视图是对原始集合的引用,不是创建新的集合,因此对视图中的集合进行的操作直接反映在原始集合上
4.批操作可以避免频繁地使用迭代器,可以快速地实现两个集合间的交、并、差等操作
5.Array.asList可以将数组装换为集合:HashSet<String> a = new HashSet<String>(Arrays.asList(values));
6.集合转换成数组:String[] values = a.toArray(new String[a.size()]);


四、算法

1.用一个方法计算链表、数组列表或数组中最大元素,此max方法接收任何实现了Collection接口的对象:

public static <T extends Comparable> T max(Collection<T> c){ 用Iterator的next()和T的comparaTo实现 }

2.Collections类中的sort方法可以对实现了List接口的集合进行排序,Collections类的shuffle方法会随机的混排列表中的元素顺序
3.集合类库使用的是归并排序算法,比快速排序慢一些。归并排序有一个优点:稳定,即不需要交换相同的元素