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<Student> { 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<Student,String> tm = new TreeMap<Student,String>(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<Map.Entry<Student,String>> entrySet = tm.entrySet(); Iterator<Map.Entry<Student,String>> it = entrySet.iterator(); while(it.hasNext()) { Map.Entry<Student,String> 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;前者是集合框架的工具类后者是数组的工具类;