Welcome

首页 / 软件开发 / JAVA / java的collections集合

java的collections集合2007-05-28 yycnet.yeah.net yyc译下面这张表格(表一)总结了用一个集合能做的所有事情(亦可对Set和List做同样的事情,尽管List还提供了一些额外的功能)。Map不是从Collection继承的,所以要单独对待。

boolean add(Object) *保证集合内包含了自变量。如果它没有添加自变量,就返回false(假)
boolean addAll(Collection) *添加自变量内的所有元素。如果没有添加元素,则返回true(真)
void clear() *删除集合内的所有元素
boolean contains(Object) 若集合包含自变量,就返回“真”
boolean containsAll(Collection) 若集合包含了自变量内的所有元素,就返回“真”
boolean isEmpty() 若集合内没有元素,就返回“真”
Iterator iterator() 返回一个反复器,以用它遍历集合的各元素
boolean remove(Object) *如自变量在集合里,就删除那个元素的一个实例。如果已进行了删除,就返回“真”
boolean removeAll(Collection) *删除自变量里的所有元素。如果已进行了任何删除,就返回“真”
boolean retainAll(Collection) *只保留包含在一个自变量里的元素(一个理论的“交集”)。如果已进行了任何改变,就返回“真”
int size() 返回集合内的元素数量
Object[] toArray() 返回包含了集合内所有元素的一个数组

Boolean add(Object)

*Ensures that the Collection contains the argument. Returns false if it doesn’t add the argument.

Boolean addAll(Collection)

*Adds all the elements in the argument. Returns true if any elements were added.

void clear()

*Removes all the elements in the Collection.

Boolean contains(Object)

True if the Collection contains the argument.

Boolean containsAll(Collection)

True if the Collection contains all the elements in the argument.

Boolean isEmpty()

True if the Collection has no elements.

Iterator iterator()

Returns an Iterator that you can use to move through the elements in the Collection.

Boolean remove(Object)

*If the argument is in the Collection, one instance of that element is removed. Returns true if a removal occurred.

Boolean removeAll(Collection)

*Removes all the elements that are contained in the argument. Returns true if any removals occurred.

Boolean retainAll(Collection)

*Retains only elements that are contained in the argument (an “intersection” from set theory). Returns true if any changes occurred.

int size()

Returns the number of elements in the Collection.

Object[] toArray()

Returns an array containing all the elements in the Collection.

Object[] toArray(Object[] a)

Returns an array containing all the elements in the Collection, whose type is that of the array a rather than plain Object (you must cast the array to the right type).


*This is an “optional” method, which means it might not be implemented by a particular Collection. If not, that method throws an UnsupportedOperationException. Exceptions will be covered in Chapter 9.


表一*这是一个“可选的”方法,有的集合可能并未实现它。若确实如此,该方法就会遇到一个UnsupportedOperatiionException,即一个“操作不支持”违例,详见第9章。

下面这个例子向大家演示了所有方法。同样地,它们只对从集合继承的东西有效,一个ArrayList作为一种“不常用的分母”使用:

//: Collection1.java// Things you can do with all Collectionspackage c08.newcollections;import java.util.*;public class Collection1 {// Fill with "size" elements, start// counting at "start":public static Collection fill(Collection c, int start, int size) {for(int i = start; i < start + size; i++)c.add(Integer.toString(i));return c;}// Default to a "start" of 0:public static Collection fill(Collection c, int size) {return fill(c, 0, size);}// Default to 10 elements:public static Collection fill(Collection c) {return fill(c, 0, 10);}// Create & upcast to Collection:public static Collection newCollection() {return fill(new ArrayList());// ArrayList is used for simplicity, but it"s// only seen as a generic Collection // everywhere else in the program.}// Fill a Collection with a range of values:public static Collection newCollection(int start, int size) {return fill(new ArrayList(), start, size);}// Moving through a List with an iterator:public static void print(Collection c) {for(Iterator x = c.iterator(); x.hasNext();)System.out.print(x.next() + " ");System.out.println();}public static void main(String[] args) {Collection c = newCollection();c.add("ten");c.add("eleven");print(c);// Make an array from the List:Object[] array = c.toArray(); // Make a String array from the List:String[] str = (String[])c.toArray(new String[1]);// Find max and min elements; this means// different things depending on the way// the Comparable interface is implemented:System.out.println("Collections.max(c) = " +Collections.max(c));System.out.println("Collections.min(c) = " +Collections.min(c));// Add a Collection to another Collectionc.addAll(newCollection());print(c);c.remove("3"); // Removes the first oneprint(c);c.remove("3"); // Removes the second oneprint(c);// Remove all components that are in the// argument collection:c.removeAll(newCollection());print(c);c.addAll(newCollection());print(c);// Is an element in this CollectionSystem.out.println("c.contains("4") = " + c.contains("4"));// Is a Collection in this CollectionSystem.out.println("c.containsAll(newCollection()) = " + c.containsAll(newCollection()));Collection c2 = newCollection(5, 3);// Keep all the elements that are in both// c and c2 (an intersection of sets):c.retainAll(c2);print(c);// Throw away all the elements in c that// also appear in c2:c.removeAll(c2);System.out.println("c.isEmpty() = " +c.isEmpty());c = newCollection();print(c);c.clear(); // Remove all elementsSystem.out.println("after c.clear():");print(c);}} ///:~
通过第一个方法,我们可用测试数据填充任何集合。在当前这种情况下,只是将int转换成String。第二个方法将在本章其余的部分经常采用。
newCollection()的两个版本都创建了ArrayList,用于包含不同的数据集,并将它们作为集合对象返回。所以很明显,除了Collection接口之外,不会再用到其他什么。
print()方法也会在本节经常用到。由于它用一个反复器(Iterator)在一个集合内遍历,而任何集合都可以产生这样的一个反复器,所以它适用于List和Set,也适用于由一个Map生成的Collection。
main()用简单的手段显示出了集合内的所有方法。
在后续的小节里,我们将比较List,Set和Map的不同实现方案,同时指出在各种情况下哪一种方案应成为首选(带有星号的那个)。大家会发现这里并未包括一些传统的类,如Vector,Stack以及Hashtable等。因为不管在什么情况下,新集合内都有自己首选的类。