1、话不多说,整一个集合框架的体系结构图:

[java理论篇]--java的集合框架_第1张图片


2、Collection接口:

      有两个子接口:List和Set

      List特点:元素有序,元素可以重复,底层的数据结构决定其有索引;

      Set特点:元素无序,元素不可以重复;

     List的子类对象不多说,其常用方法会用,还有就是迭代器,是一个内部类实现的;

     Set:这个集合容器,与Map有关;主要的两个子类:一个HashSet和TreeSet;

     HashSet:底层是哈希表,使用这个集合存对象的时候,会调用hashCode()和

                    equals();依据这两个方法去存对象,当你想存自定义的对象的时候,复写

                    这两个方法,按照自定的方法去决定对象是否相同;

                    这个子类,关键是对对象的是否相同进行比较;

   TreeSet:底层是二叉树,使用这个集合存取对象的时候,主要是对 对象进行排序;

                 自定义对象的存取时候,首先你要确定对象具有比较性(实现comparable),

                 然后实现compareTo方法;有了这些,TreeSet便会调用compareTo方法;

                 如果,对象不具有比较性,还可以构造一个比较器,传给TreeSet的构造方法

                 ,这时候TreeSet这个容器便有了一个自定义的比较器;比较器的创建,实现

                 comparator即可;


3、Map:键值对的形式进行存取;和Set相似;Set的底层据说是Map实现的;

     子类:HashTable、HashMap和TreeMap;

HashTable:不可以null为K/V;同步;

HashMap:可 以null为K/V; 不同步;

TreeMap:线程不同步;

    重点Map的取元素的方法:Map没有迭代器;

    我们可以拿到键去取值;两种取元素的方法;

     keyset:将map中所有的键存入到set集合中,然后使用set的迭代器取出所有的键,

                 将使用get方法取出所有的值;

     entrySet:这个方法将map的映射关系(Map.entry),返回给一个Set集合;

                     然后通过Map.entry中的getKey和getValue取相应的键值;见代码;

/*
需求:对学生对象的年龄进行升序排序。
因为数据是以键值对形式存在的。
所以要使用可以排序的Map集合。TreeMap。
*/
import java.util.*;
class StuNameComparator implements Comparator
{
    public int compare(Student s1,Student s2)
    {
        int num = s1.getName().compareTo(s2.getName());
        if(num==0)
            return new Integer(s1.getAge()).compareTo(new Integer(s2.getAge()));
        return num;
    }
}
class  MapTest2
{
    public static void main(String[] args)
    {
        TreeMap tm = new TreeMap(new StuNameComparator());
        tm.put(new Student("blisi3",23),"nanjing");
        tm.put(new Student("lisi1",21),"beijing");
        tm.put(new Student("alisi4",24),"wuhan");
        tm.put(new Student("lisi1",21),"tianjin");
        tm.put(new Student("lisi2",22),"shanghai");
                                                                                                                                     
        Set> entrySet = tm.entrySet();
        Iterator> it = entrySet.iterator();
        while(it.hasNext())
        {
            Map.Entry me = it.next();
            Student stu = me.getKey();
            String addr = me.getValue();
            System.out.println(stu+":::"+addr);
        }
    }
}



4、泛型(另参考:http://www.blogjava.net/jackhome/articles/java-flect.html)

     泛型类、泛型方法和泛型接口;静态方法的泛型;

     静态方法不可以访问类上定义的泛型;如果静态方法操作的类型不确定,可以将泛型

     定义在静态方法上,不定义在类上;

     泛型的上下限;

5、集合的工具类:Collections和Arrays;前者是集合框架的工具类后者是数组的工具类;