集合框架的相关定义
集合:即存储对象的容器。
框架:即类库的集合。
集合框架:即用来表示和操作集合的统一框架,由相关的接口、实现类和一些帮助程序员完成编程的算法。
集合的作用:
- 在类的内部,对数据进行组织
- 简单而快速的搜索大数量的条目
- 有的集合接口,提供了一系列排列有序的元素,并且可以在序列中间快速的插入或者删除有关元素
- 有的集合接口,提供了映射关系,可以通过关键字(key)去快速查找到对应的唯一对象,而这个关键字可以是任意类型
集合与数组的区别:
- 集合长度是可变的,数组长度是固定不变的
- 集合中只能存储对象,不能存储基本数据类型,而数组中两者都可存储
- 集合中存储的对象可以是任意类型的,而数组中只能存储同一类型的对象或同一基本类型的数据
相关说明:
- 集合中可以存储任意类型的对象是因为,对象存入集合中都变成了Object类型,所以取出时要注意类型转换,当然也可以通过添加泛型来指定集合只能装载某一特定类型的对象。
- 注意集合中只能存储对象,而当我们在集合中添加整形等基本数据类型时仍然能够编译成功,这是因为在JDK1.5以后添加了自动装箱拆箱的机制,int类型被自动装箱成为Integer类型,以此类推。
集合框架的构成
由于集合框架中的很多类功能是相似的,所以设计了大量接口来规范类,最重要的是两个根接口,Collection接口和Map接口
Collection接口下面又有三个重要的子接口:List接口、Queue接口、Set接口,这三个子接口对应着三个重要的实现类:ArrayList、LinkList、HashSet
Map接口对应一个重要的实现类:HashMap
Collection接口
Collection接口中的一些共性方法,主要是增删改查:
添加方法:
- boolean add(Object e)—— 一次只能添加一个元素
- boolean addAll(Collection< extends E> c)—— 将一个参数容器中的所有元素添加到当前容器中
删除方法:
- boolean remove(Object e) 删除一个指定对象
- boolean removeAll(Collection<> c) 删除指定Collection中和本Collection中相同的元素
- void clear ():直接将集合中的元素清空
判断方法:
- boolean contains (Object)是否包含指定元素
- boolean containsAll(Collection<> c) 是否包含指定容器中的元素
- boolean imEmpty(): 是否有元素
获取元素个数:
- int size (),获取元素的个数
取交集:
- boolean retainAll(Collection<> c) 保留和指定collection集合中相同的元素,不相同的元素会被删除
将集合转成数组:
- Object[] toArray()
取出元素的方法(重点掌握)
- Iterator iterator()
迭代器Iterator
迭代器是一种设计模式,它是取出集合中元素的方式的一个对象,内置在容器中,可以通过iterator()方法完成,该方法返回一个Iterator类型对象。
将每一个容器中的取出方式进行了封装。并对外暴露。这样无论是什么容器或者数据结构,只要内部取出方式实现了Iterator接口,都可以通过该接口取出这些容器中的元素。
它的出现,将容器的取出方式和容器的数据结构分离,降低了耦合性。而取出方式因为直接在访问容器中的元素,并依赖具体的数据结构,所以被定义在了容器中。通过内部类在实现Iterator接口。
用法比较简单:
- 使用方法iterator()要求容器返回一个Iterator。第一次调用Iterator的next()方法时,它返回序列的第一个元素。注意:iterator()方法是java.lang.Iterable接口,被Collection继承。
- 使用next()获得序列中的下一个元素。
- 使用hasNext()检查序列中是否还有元素。
- 使用remove()将迭代器新返回的元素删除。
例子:
import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;
public class CollectionText {
public static void main(String[] args) {
Collection<String> collection = new ArrayList<String>();
collection.add("a");
collection.add("b");
collection.add("c");
collection.add("d");
collection.add("e");
Iterator<String> iterator = collection.iterator();
while (iterator.hasNext()) {
System.out.println(iterator.next());
}
}
}
技巧性掌握
明确具体集合对象名称的后缀:
- 如果后缀是List,都所属于List体系,通常都是非同步的。
- 如果后缀是Set,都所属于Set体系通常都是非同步的。
- 这些体系中的其他子类对象,后缀不是所属接口名的,一般都是同步的。这在常用子类对象中通用。
明确数据结构:
- 对于jdk1.2版本的子类对象。后缀名是所属的体系。前缀名就是数据结构的名称。
- ArrayList:看到Array,就要明确是数组结构;查询快
- LinkedList:看到Link,就要明确链表结构,就要想到add get remove和 first last结合的方法。增删快
- HashSet:看到hash ,就要明确是哈希表,查询快,而且所存储的对象具有唯一性。就要想到元素必须覆盖hashCode方法和 equals方法。
- TreeSet:就看到Tree,就要明确是二叉树,可以对元素排序;就要想到两种排序方式:自然排序:Comparable接口,覆盖compareTo(一个参数)java.lang。比较排序:Comparator接口,覆盖compare(两个参数):java.util。判断元素唯一性的依据就是比较方法的返回结果 return 0;
参考文章:
http://blog.csdn.net/watermusicyes/article/details/7985381
http://www.cnblogs.com/amboyna/archive/2007/09/25/904804.html
http://developer.51cto.com/art/201107/274951.htm