A:集合的超级接口是Collection,它下面的子接口有list,set.    
一.List集合
1.集合是什么
集合是用来存储对象的容器, 和数组类似, 优点在于长度可变. 可以存储多种类型的数据.,可以储存重复元素。
2.List的常用方法
添加元素
boolean add(E e) 
void add(int index, E element) 
boolean addAll(Collection<? extends E> c) 
删除元素
E remove(int index) 
boolean remove(Object o) 
void clear() 
替换元素
E set(int index, E element) 
获取元素
E get(int index) 
获取长度
int size() 
  2.List的迭代
  a.普通for循环
  由于List是有序的, 可以通过索引获取元素, 所以可以定义for循环, 从0循环到size()-1, 每次获取1个元素
  b.迭代器
  调用List的iterator()方法获取迭代器, 然后调用hasNext()方法判断是否包含下一个元素, 调用next()获取下一个元素
     
  c.增强for循环。
* 二.List集合的实现类
1.ArrayList
数组实现, 查找快, 增删慢
2.LinkedList
链表实现, 增删快, 查找慢
3.Vector
原理和ArrayList相同, 线程安全, 效率低* 三.与集合相关的JDK5新特性
1.泛型
在使用集合的时候, 类名后面可以用"<类型>"的形式加上泛型
集合类一旦加上泛型, 那么只能存储同一类型数据, 获取对象的时候直接就是指定类型, 省去类型强转的麻烦.
2.增强for循环
语法: for(元素类型  变量名 : 容器) { 循环体 }
循环的次数由容器大小决定, 每次循环时都会获取容器中的一个元素赋值给变量
3.可变参数
在定义方法的形参时, 可以用"类名... 变量名"形式定义一个可变参数
可变参数可以接收指定类型的一个到多个数据, 或者也可以接收指定类型的一个数组

五.Set集合
1.什么是Set集合
Set集合中素没有存储顺序, 不可重复.
* 2.Set集合的常用方法
添加元素
boolean add(E e) 
boolean addAll(Collection<? extends E> c) 
删除元素
boolean remove(Object o) 
void clear() 
获取长度
int size() 
获取迭代器
  Iterator<E> iterator()
*** 3.Set集合的迭代
a.使用迭代器
  b.增强for循环
  4.常用的Set类
  *** a.HashSet
  去重复, 速度快
  HashSet在存储元素的时候, 先调用对象的hashCode方法, 计算一个哈希值, 然后在集合中查找是否有哈希值相同的对象
  如果没有哈希值相同的对象, 直接存入
  如果有哈希值相同的对象, 则和哈希值相同的对象进行equals比较
  equals比较结果为false就存入
  equals比较结果为true则不存
  如果我们想在HashSet中存储自定义对象, 并且去重复, 那么这个自定义的类必须重写hashCode和equals方法.
*** b.TreeSet
  去重复, 排序
  在向TreeSet中存储元素的时候, TreeSet会使用指定的比较算法对存储元素进行排序, 内部以二叉树形式进行存储.
指定比较算法的方式:
自然顺序: 在类上实现Comparable接口, 重写compareTo方法, 在方法中定义比较算法. 
  比较器顺序: 定义类实现Comparator接口, 重写compare方法, 创建比较器对象, 传入TreeSet构造函数.
  如果我们想在TreeSet中存储自定义对象, 并且排序, 要么这个自定义的类实现Comparable接口, 要么在TreeSet中传入Comparator.
c.LinkedHashSet
  去重复, 保留存储顺序
是HashSet的子类, 同样使用哈希算法进行去重复.
六. Map: 键值对, 可以通过键对象查找值.
* HashMap: 去重复, 效率高
* TreeMap: 排序
LinkedHashMap: 保留存储顺序
Hashtable: 和HashMap原理相同, 线程安全, 效率低 . Hashtable中的键和值都不能为null
Properties: 通常用来操作配置文件, Hashtable的子类.
* .Map的迭代
keySet: 调用keySet()方法获取一个由所有键对象组成的Set集合, 迭代Set集合获取每一个键对象, 再使用键对象获取值对象.
entrySet: 调用entrySet()方法获取一个由所有Entry对象组成的Set集合, 迭代Set集合获取每一个Entry对象, 再通过Entry对象获取键和值.
存储键值对
V put(K key, V value) 
根据键获取值
V get(Object key) 
获取键对象组成的Set
Set<K> keySet() 
获取键值对组成的Set
Set<Map.Entry<K,V>> entrySet() 
清空所有键值对
void clear() 
  判断是否为空集合
  boolean isEmpty() 
判断是否包含指定的键对象
  boolean containsKey(Object key) 
  判断是否包含指定的值对象
  boolean containsValue(Object value) 
  将另一个Map中的键值对全部添加到当前Map
  void putAll(Map<? extends K,? extends V> m) 
  根据键对象删除键值对, 返回值对象
  V remove(Object key)
  获取所有值对象组成的Collection集合
  Collection<V> values()