java集合类是一种特别有用的工具类 , 可以用于存储数量不等的多个对象 , 并可以实现常用的数据结构 , 如栈,队列等 . 除此之外 , Java对象还可用于保存具有映射关系的关联数组 . java集合大致可分为Set,List和Map三种体系,其中Set代表无序 , 不可重复的集合 ; List代表有序,重复的集合 , 而Map则代表具有映射关系的集合 . 从java 5以后,java又增加了Queue体系集合,代表一种队列集合实现.
集合类和数组不一样 , 数组元素既可以是基本类型的值 , 也可以是对象(实际上保存的是对象的引用变量) ; 而集合里只能保存对象(实际上只是保存对象的引用变量) . java的集合类主要由两个接口派生出来 : Collection和Map,Collection和Map是java集合框架的根接口 , 这两个接口又包含了一些子接口和实现类 . 如果访问List集合中的元素 , 可以直接根据元素的索引来访问 ; 如果访问Map集合中的元素,可以根据每项元素的key来访问其value , 如果访问Set集合中的元素 , 则只能根据元素本身来访问(这也是Set集合里元素不允许重复的原因).
Collection和Iterator接口
Collection接口是List,Set和Queue接口的父接口.Collection接口里定义了如下操作集合元素的方法:
- boolean add(Object o):该方法用于向集合里添加一个元素.如果集合对象被添加操作改变了,则返回true.
- boolean addAll(Collection c):该方法把集合C里所有的元素添加到指定集合里.如果集合对象被添加操作改变了,则返回true.
- void clear():清除集合里所有的元素,将集合长度变为0.
- boolean contains(Object o):返回集合里是否包含指定元素.
- boolean containsAll(Collection c):返回集合里是否包含集合C里的所有元素
- boolean isEmpty():返回集合是否为空.当集合长度为0时返回true,否则返回false
- Iterator iterator(): 返回一个Iterator对象,用于遍历集合里的元素.
- boolean remove(Object o):删除集合中的指定元素o,当集合中包含了一个或多个元素o时,该方法只删除第一个符号条件的元素,该方法将返回true.
- boolean removeAll(Collection c):从集合中删除集合C里包含的所有元素(相当于调用该方法的集合减集合c),如果删除了一个或一个以上的元素,则该方法返回true.
- boolean retainAll(Collection c):丛集合中删除集合c里不包含的元素,如果该操作改变了调用该方法的集合,则该方法返回true.
- int size:该方法返回集合里元素的个数.
- Object[] toArray(): 该方法把集合转换成一个数组,所有集合元素变成对应的数组元素.
Iterator接口定义了三个方法:
- boolean hasNext():如果被迭代的集合元素还没有被遍历完,则返回true
- Object next():返回集合里的下一个元素
- void remove():删除集合里上一次next方法返回的元素.
当使用Iterator对集合元素进行迭代时,Iterator并不是把集合元素本身传给了迭代变量 , 所以修改迭代变量的值对集合元素本身没有任何影响 . Iterator迭代器采用的是快速失败的机制 , 一旦在迭代过程中检测到该集合已经被修改 , 程序立即引发ConcurrentModificationException异常 , 而不是显示修改后的结果 , 这样可以避免共享资源而引发的潜在问题.
而使用foreach循环来迭代访问Collection集合里的元素更加简洁 , 与使用Iterator接口迭代访问集合元素类似的是 , foreach循环中的迭代变量也不是集合元素本身 , 系统只是把集合元素的值赋给迭代变量.