Collection 集合

Collection 是最基本的集合接口，一个 Collection 代表一组 Object 的集合，这些 Object 被称作 Collection 的元素。

根据用途的不同，Collection 又划分为 List 与 Set。

Collection 接口的主要接口方法有：

public interface Collection

extends Iterable

{

//取得 Collection 的容量（元素数目）

public abstract int size();

//判断是否为空

public abstract boolean isEmpty();

//判断是否包含某对象元素

public abstract boolean contains(Object obj);

//取得对所有元素的遍历。可以通过 Iterator 提供的方法遍历集合的元素

public abstract Iterator iterator();

//将集合元素以数据形式返回

public abstract Object[] toArray();

public abstract Object[] toArray(Object aobj[]);

//向集合体插入一个新的元素

public abstract boolean add(Object obj);

//从集合体删除一个元素

public abstract boolean remove(Object obj);

//是否包含所有 collection 里的所有元素

public abstract boolean containsAll(Collection collection);

//插入 collection 里的所有元素

public abstract boolean addAll(Collection collection);

//移除 collection 里的所有元素

public abstract boolean removeAll(Collection collection);

public abstract boolean retainAll(Collection collection);

//移除所有元素

public abstract void clear();

//... other methods

}

该接口定义了集合的基本操作方法。

List 集合

List 继承自 Collection 接口。List 是一种有序集合，List 中的元素可以根据索引（顺序号：元素在集合中处于的位置信息）进行取得/删除/插入操作。

跟 Set 集合不同的是，List 允许有重复元素。对于满足 e1.equals(e2)条件的 e1 与 e2 对象元素，可以同时存在于 List 集合中。当然，也有 List 的实现类不允许重复元素的存在。

同时，List 还提供一个 listIterator()方法，返回一个 ListIterator 接口对象，和 Iterator 接口相比，ListIterator 添加元素的添加，删除，和设定等方法，还能向前或向后遍历。

List 接口添加的主要方法有：

public interface List

extends Collection

{

//... other Collection methods

//根据索引取得元素

public abstract Object get(int i);

//在指定位置（索引）处插入新的元素

public abstract Object set(int i, Object obj);

//在 List 的尾部插入新的元素

public abstract void add(int i, Object obj);

//删除指定位置（索引）处的元素

public abstract Object remove(int i);

//取得指定对象的最开始的索引位置

public abstract int indexOf(Object obj);

//取得指定对象的最后的索引位置

public abstract int lastIndexOf(Object obj);

//List 提供的新的遍历方法

public abstract ListIterator listIterator();

//从指定位置 i 处开始迭代。最初 next()方法返回的将是位置 i 处的元素。

public abstract ListIterator listIterator(int i);

//取得从位置 i 到 j 的所有元素（包含 i 但不包含 j 位置的元素），返回一个新的集合对象。

public abstract List subList(int i, int j);

}

import java.util.*;

import java.util.List;

public class SortTest {

public static void main(String args[]) throws Exception {

List<String> list = Arrays.asList("abc");

Collections.sort(list);

Collections.sort(list, Collections.reverseOrder());

for (int i=0, n=list.size(); i<n; i++) {

if (i != 0) System.out.print(", ");

System.out.print(list.get(i));

}

System.out.println();

}

}

Set 集合

Set 继承自 Collection 接口。Set 是一种不能包含有重复元素的集合，即对于满足 e1.equals(e2)条件的 e1 与 e2 对象元素，不能同时存在于同一个 Set 集合里，换句话说，Set 集合里任意两个元素 e1 和 e2 都满足 e1.equals(e2)==false 条件，Set 最多有一个 null 元素。

因为 Set 的这个制约，在使用 Set 集合的时候，应该注意：

1，为 Set 集合里的元素的实现类实现一个有效的 equals(Object)方法。

2，对 Set 的构造函数，传入的 Collection 参数不能包含重复的元素。

Set 接口里定义的方法与 Collection 基本一样，这里不再重述。

import java.util.BitSet;

public class BitOps {

public static void main (String args[]) {

BitSet set = new BitSet();

set.set(1);

set.set(2);

set.set(3);

set.set(4);

set.set(5);

System.out.println(set);

BitSet set2 = new BitSet();

set2.set(1);

set2.set(3);

set2.set(5);

set2.set(7);

BitSet set3 = (BitSet)set.clone();

set3.and(set2);

System.out.println(set3);

set3 = (BitSet)set.clone();

set3.or(set2);

System.out.println(set3);

set3 = (BitSet)set.clone();

set3.xor(set2);

System.out.println(set3);

set3 = (BitSet)set.clone();

set3.andNot(set2);

System.out.println(set3);

set3.andNot(null);

}

}

Map 集合

Map 没有继承 Collection 接口。也就是说 Map 和 Collection 是 2 种不同的集合。Collection 可以看作是（value）的集合，而 Map 可以看作是（key，value）的集合。

Map 接口由 Map 的内容提供 3 种类型的集合视图，一组 key 集合，一组 value 集合，或者一组 key-value 映射关系的集合

Map 接口

public interface Map

{

//

public static interface En try

{

public abstract Object getKey();

public abstract Object getValue();

public abstract Object setValue(Object obj);

//...

}

//作用基本等同 Collection 接口的方法

public abstract int size();

public abstract boolean isEmpty();

public abstract boolean containsKey(Object obj);

public abstract boolean containsValue(Object obj);

public abstract Object get(Object obj);

public abstract Object put(Object obj, Object obj1);

public abstract Object remove(Object obj);

public abstract void clear();

//添加 map 里包含的所有元素

public abstract void putAll(Map map);

//key 集合

public abstract Set keySet();

//value 集合

public abstract Collection values();

//key-value 映射关系的集合 Set<Entry>

public abstract Set entrySet();

//...

}

import java.util.*;

public class MapTest {

public static void main (String args[]) {

Map map = new ArrayMap(13);

map.put("Virginia", "Richmond");

map.put("Massachusetts", "Boston");

map.put("New York", "Albany");

map.put("Maryland", "Annapolis");

map.put("Rhode Island", "Providence");

map.put("Connecticut", "Hartford");

map.put("Delaware", "Dover");

map.put("New Hampshire", "Concord");

map.put("North Carolina", "Raleigh");

map.put("South Carolina", "Columbia");

map.put("New Jersey", "Trenton");

map.put("Pennsylvania", "Harrisburg");

map.put("Georgira", "Atlanta");

System.out.println(map);

System.out.println(map.keySet());

System.out.println(map.values());

}

}

集合的遍历：

所有 java.util.Collection 的实现类必须实现

public abstract Iterator iterator();

方法以支持对所包含的对象进行遍历。

java.util.Iterator [I]

+--java.util.ListIterator [I]

Iterator 接口：

public interface Iterator

{

//判断是否存在下一个元素

public abstract boolean hasNext();

//返回下一个可用的元素

public abstract Object next();

//移除当前元素

public abstract void remove();

}

ListIterator 接口：

public interface ListIterator

extends Iterator

{

//other methods defined in Iterator

//判断是否存在上一个元素

public abstract boolean hasPrevious();

//返回上一个可用的元素

public abstract Object previous();

//取得下一个可用元素的索引位置

public abstract int nextIndex();

//取得上一个可用元素的索引位置

public abstract int previousIndex();

//替换当前位置的元素

public abstract void set(Object obj);

//在当前位置插入新元素

public abstract void add(Object obj);

}

import java.util.*;

public class EnumerationIterator {

public static Iterator iterator(final Enumeration enum) {

return new Iterator() {

public boolean hasNext() {

return enum.hasMoreElements();

}

public Object next() {

return enum.nextElement();

}

public void remove() {

throw new UnsupportedOperationException();

}

};

}

public static void main (String args[]) {

Vector v = new Vector(Arrays.asList(args));

Enumeration enum = v.elements();

Iterator itor = EnumerationIterator.iterator(enum);

while (itor.hasNext()) {

System.out.println(itor.next());

}

}

}

对集合操作的工具类

Java 提供了 java.util.Collections，以及 java.util.Arrays 类简化对集合的操作

java.util.Collections 主要提供一些 static 方法用来操作或创建 Collection，Map 等集合。

java.util.Arrays 主要提供 static 方法对数组进行操作。