------- android培训、java培训、期待与您交流! ----------
集合框架介绍
1. 集合框架
值得说明一下的是,Vector,hashtable是java1.1中定义的集合类,并不继承自该体系结构,在java1.2之后,Vector实现了List接口,而Hashtable实现了Map接口,与其他java1.2之后定义的新集合类整合在了一起。不过由于历史原因,其原来的增删和遍历的方法可以继续使用。
2. 集合接口
(1) List接口
元素已先行方式存储,存储顺序与添加的顺序相同。
常用的实现该接口的类有:ArrayList, LinkedList, Vector, Stack
ArrayList是长度可变的对象引用数组,内部实现为动态数组,进行查询和遍历的性能比较高,而删除插入的效率则比较低。
LinkedList也是长度可变的队列,不过内部实现为链表,故其查询和遍历的效率比之ArrayList要低一些,而对大量数据进行增删操作的效率则要高得多。
Vector和Stack都是Java 1.1中定义的集合类,其用法略有不同。
(2) Map接口
元素以键-值映射对形式存储,并且键值不允许重复。常用实现Map接口的类有HashMap, Hashtable, TreeMap。HashMap允许有一个键值为null的元素,Hashtable和TreeMap都不允许。HashMap是线程不安全的,而Hashtable是线程安全的。在TreeMap中,元素按照键值的自然顺序进行插入排序。
(3) Set接口
元素的顺序是不固定的,元素不允许重复。
是此案Set接口的类有HashSet和TreeSet。HashSet中中只允许一个null元素。TreeSet是Set的一种变体,可以按照自然顺序排序。在添加元素时会将其插入到已经有序的元素序列中。
3. 集合遍历
(1) Iterator和Iterable接口
Iterator接口可以以统一的方式对各种集合元素进行遍历,也称为“迭代器”。实现了Iterable接口的集合类,可以调用iterator()方法获得Iterator对象,然后通过hasNext()和next()防火队集合中元素进行遍历或者移除操作。
hasNext()方法检测集合中是否还有下一个元素。
next()方法返回集合中的下一个元素。
Iterator遍历集合元素的方法:
Iterator<Student> it = stuList.iterator();
while(it.hasNext()){
Student s = it.next();
}
//或者使用其简写形式
while(Student s : stuList){
Student s = s;
}
当然也可以通过下标直接访问,不再详述。
(2) Map集合遍历
Map因为其元素和结构的特殊性,所以遍历方式也比较多。
Map<String,Student> stuMap = getStuMap();
//1. 通过Map的keySet()方法遍历
Set<String> stuKeys = stuMap.keySet();
for(String key : stuKeys){//由于是对Set的遍历,元素顺序是不固定的
Student s = stuMap.get(key);
}
//2. 使用Map的entrySet()方法遍历,Map.Entry是指一个单独的键值对映射
Set<Map.Entry<String,Student>> entrySet = stuMap.entrySet();
for(Map.Entry<String,Student>> entry : entrySet){
Student s = entry.getValue();
}
//3. 使用Map的values()方法,该方法放回存储元素的Collection对象
Collection<Student> stus = (Collection<Student>)stuMap.value();
for(Student s : stus){
Student s = s;
}
4. Collections和Comparable
Collections中提供了一套对集合进行排序、遍历等多种算法的实现,如sort()、reverse()、shuffle()。因为其排序的依据是根据集合中元素的compreTo()方法进行比较,所以如果要调用其相关方法,集合中元素对应的类最好实现Comparable接口,并实现其int CompreTo(Object o)方法。