用来管理/容纳多个对象的对象(或称为容器);
面向对象可重用性的体现,对数组作了功能封装。
Collection是一个接口:是以对象为单位来管理元素的。
基本操作:add remove size,
遍历:迭代遍历
有两个子接口:List接口和Set接口
1,List接口:元素是有顺序(下标),可以重复。有点像数组。可以用迭代器(Iterator)和数组遍历集合。
List接口里本身有自己的方法,还有从父接口Collection里继承的方法。
remove(int)删除某一位置的对象、add(int,Object)往某一位置插入对象 、get(int)查询某一位置上的元素。
遍历:迭代遍历、for遍历
Collections.sort(list); 引入list集合然后对list集合里的对象(如:Student类)进行排序时,
只要在让对象(类)实现Comparable接口,再覆盖接口里面的方法(compareTo()方法),
在compareTo()方法里写出进行什么样的方式排序,
Public int compareTo(Object o){
Work w=(Work)o;
If(this.salary!=w.salary){return(int)w.salary-(int)this.salary;}
Else If(this.age!=w.age){returnw.age-this.age;}else retuenthis.name.compareTo(w.name);sss
}
然后在主函数里使用Collections.sort(list); ,就对list里的对象进行排序了,
而不用管Collections.sort()方法是怎么实现的,既不用管Collections.sort()方法的实现体。
排序规则:对象实现Comparable接口,覆盖compareTo()方法,Collections.sort(List);
1)ArrayList集合类实现List接口,轻量级,底层是以数组实现的,查询快,增删慢,线程不安全,用get(int)方法多时,
Vector集合也实现List接口,底层也是以数组实现的。但这个类已经放弃了。重量级,查询慢,增删快,线程安全。(Vector和HashTable是线程同步的(synchronized),所以线程安全。性能上,ArrayList和HashMap分别比Vector和Hashtable要好。)
2)LinkedList集合类实现List接口,他底层是以链表实现的,查询慢,增删快,
用remove(int)、add(int,Object)方法多时,
自己实现栈(stack),并对栈里进行增删操作。
class MyStack{
private LinkedListlist=new LinkedList();
public void push(Objecto){
list.addFirst(o);
}
public voidpop(Object o){
list.removeFirst();}}
2,Set接口:无顺序,不可以重复(内容不重复,而非地址不重复)。只能用迭代器(Iterator)遍历集合。
Set接口里本身无方法,方法都是从父接口Collection里继承的,
遍历:迭代遍历
实现类:保证元素内容不重复。
1)HashSet集合类实现Set接口,底层是以数组实现的。HashSet集合里不允许有重复对象
每向HashSet集合类里添加一个对象时,先使用HashSet集合类里add(o)方法,
再调用对象o的hashCode()方法算出哈稀码,保证相同对象返回相同的哈希码。
如果哈稀码一样,再调用对象o里的equals()方法对对象的属性进行比较是否相等,
集合也可以构造集合,如:List<Object> list=new ArrayList<Object>();Set<Object> set=new HashSet<Object>(list);原来在list集合里的对象是可以重复的,但被set集合构造之后,重复的对象将被去掉
按这三种顺序来理解接口: 1)接口特点;2)接口常见操作(方法);3)接口实现类的特点
Map:对应一个键对象和一个值对象,可以根据key找value,
(Key--value)不可重复且无序--可重复
排序(SortedMap是Map的子接口):TreeMap类实现SortedMap接口;对集合进行排序。
基本操作:put() get()
遍历:键遍历 ketSet()返回键的集合(Set)(说明map的键是用set实现的,不能重复)
值遍历 values()返回值的集合。
HashMap类实现Map接口: 查询快,线程不安全,允许键和值对象为null
Hashtable类实现Map接口:查询慢,线程安全
TreeMap类实现Map接口:SortedMap的实现类,自动对键进行排序。
Iterator 实例
Static void printValue(Map map){
Collection col=map.values();
Iterator it=col.iterator();
While(it.hasNext()){
Objectobj=it.next();…;
}}
Jdk1.5新特性加了forEach循环方便数组和集合的遍历(是在泛型的基础上提出的)
Static void printValue(Map<Integer Product> map){
Set<Integer> s=map.ketSet();
For(Integer i:s){xxxx}
}
注意:如果需要定位,就得用“普通”的 for,在列表遍历期间无法删除集合对象。
课外考题、Collection 和 Collections 的区别。
Collection 是集合类的上级接口,继承与他的接口主要有Set 和List.
Collections 是针对集合类的一个帮助类,他提供一系列静态方法实现对各种集合的搜索、排序、线
程安全化等操作
ArrayList 和Vector都是使用数组方式存储数据,此数组元素数大于实际存储的数据以便增加和插
入元素,它们都允许直接按序号索引元素,但是插入元素要涉及数组元素移动等内存操作,所以索引
数据快而插入数据慢,Vector由于使用了synchronized方法(线程安全),通常性能上较ArrayList
差,而LinkedList使用双向链表实现存储,按序号索引数据需要进行前向或后向遍历,但是插入数
据时只需要记录本项的前后项即可,所以插入速度较快。