一、集合类概述
集合与数组的不同之处:
- 
数组长度是固定的,集合的长度是可变的 
- 
数组用来存放基本类型的数据,集合用来存放对象的引用 
常用的集合有List集合、Set集合和Map集合,其中List与Set继承了Collection接口,详见图“常用集合类的继承关系”
 
二、Collection接口
//Collection接口的常用方法
add();
remove();
isEmpty();
iterator();
size();
 
public static void main(String[] args) {
    Map <String,String>map = new HashMap<>();
    map.put("熊大", "棕色");
    map.put("熊二", "黄色");
 
    Iterator<Map.Entry<String, String>> entries = map.entrySet().iterator();
    while(entries.hasNext()){
        Map.Entry<String, String> entry = entries.next();
        System.out.println(entry.getKey() + ":" + entry.getValue()); //熊大:棕色
    }
 
    Collection<String> list = new ArrayList<>();
    list.add("aaa");
    list.add("bbb");
 
    Iterator<String> it = list.iterator();
    while(it.hasNext()){    //判断是否有下一个元素
        System.out.println(it.next());  //获取集合中元素(对象)并输出
    }
}
 
 
三、List(列表)
- 
get(int index);    //获得指定索引位置的元素 
- 
set(int index, Object obj);    //指定索引位置对象为指定对象 
- 
ArrayList类实现了可变数组,允许保存所有元素,包括null。 
- 
优点:可以根据索引位置对集合进行快速随机访问, 
- 
缺点:向指定的索引位置插入对象或删除对象速度较慢。 
- 
LinkedList类采用链表结构保存对象, 
- 
优点:向集合中插入、删除对象时,使用LinkedList类实现的List集合效率较高, 
- 
缺点:但对于随机访问集合中的对象,使用LinkedList类实现List集合效率较低。 
public static void main(String[] args) {
    List<String> list = new ArrayList<>();
    list.add("aaa");
    list.add("bbb");
    list.add("ccc");
 
    int i = (int)(Math.random()*list.size());
    System.out.println(list.get(i)); //输出随机值
    list.remove(i); //移除元素
 
    for (int j = 0; j < list.size(); j++){
        System.out.println(list.get(j)); //输出
    }
}
 
String str = "aaa,bbb,ccc";
List<String> list = Arrays.asList(str.split(","));
 
 
四、Set(集合)
- 
Set是最简单的一种集合。集合中的对象不按特定的方式排序(存入与取出的顺序不一定相同),集合中没有重复对象(可以用来去重)。 
- 
Set接口继承了Collection接口,包含其中的所有方法 
- 
Set接口常用的实现类有HashSet 和 TreeSet 
public static void main(String[] args) {
    Set set = new HashSet();
    set.add("世界军事");
    set.add("兵器知识");
    set.add("兵器知识");
    set.add("舰船知识");
    set.add("汉和防务");
 
    Iterator it = set.iterator();
    while (it.hasNext()) {
        System.out.println(it.next()); //Set 集合存和取的顺序不一致。
    }
}
 
 
五、Map(映射)
 
- 
HashMap类 
- 
TreeMap类 
Map接口中的常用方法
put();
containsKey();
containsValue();
get();
keySet();    //返回该集合中所有Key对象形成的Set集合
values();    //返回该集合中所有值对象形成的Collection集合
 
public static void main(String[] args) {
    Map<String, String> map = new HashMap<>();
    map.put("01","aaa");
    map.put("02","bbb");
 
    Set<String> set = map.keySet();
    Iterator<String> it = set.iterator();
 
    while (it.hasNext()) {
        System.out.println(it.next());
    }
 
    Collection <String> coll = map.values();
    it = coll.iterator();
 
    while (it.hasNext()){
        System.out.println(it.next());
    }
}
 
 
六、CollectionUtils(Java集合类工具)的操作方法
//例1: 判断集合是否为空:
CollectionUtils.isEmpty(null): true
CollectionUtils.isEmpty(new ArrayList()): true
CollectionUtils.isEmpty({a,b}): false
 
//例2: 判断集合是否不为空:
CollectionUtils.isNotEmpty(null): false
CollectionUtils.isNotEmpty(new ArrayList()): false
CollectionUtils.isNotEmpty({a,b}): true
 
//2个集合间的操作:
//集合a: {1,2,3,3,4,5}
//集合b: {3,4,4,5,6,7}
 
CollectionUtils.union(a, b)(并集): {1,2,3,3,4,4,5,6,7}
CollectionUtils.intersection(a, b)(交集): {3,4,5}
CollectionUtils.disjunction(a, b)(交集的补集): {1,2,3,4,6,7}
CollectionUtils.disjunction(b, a)(交集的补集): {1,2,3,4,6,7}
CollectionUtils.subtract(a, b)(A与B的差): {1,2,3}
CollectionUtils.subtract(b, a)(B与A的差): {4,6,7}