按键盘上方向键 ← 或 → 可快速上下翻页,按键盘上的 Enter 键可回到本书目录页,按键盘上方向键 ↑ 可回到本页顶部!
————未阅读完?加入书签已便下次继续阅读!
implemented by a particular Collection。 If not; that method throws
an U n s u p p o r t e d O p e r a t i o n E x c e p t i o n 。 Exceptions will be covered in
Chapter 9。
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() 返回包含了集合内所有元素的一个数组
*这是一个“可选的”方法,有的集合可能并未实现它。若确实如此,该方法就会遇到一个
UnsupportedOperatiionException,即一个“操作不支持”违例,详见第9 章。
下面这个例子向大家演示了所有方法。同样地,它们只对从集合继承的东西有效,一个ArrayList 作为一种
“不常用的分母”使用:
//: Collection1。java
// Things you can do with all Collections
package c08。newcollections;
import java。util。*;
public class Collection1 {
// Fill with 'size' elements; start
236
…………………………………………………………Page 238……………………………………………………………
// 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 parable 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 Collection
237
…………………………………………………………Page 239……………………………………………………………
c。addAll(newCollection());
print(c);
c。remove(〃3〃); // Removes the first one
print(c);
c。remove(〃3〃); // Removes the second one
print(c);
// Remove all ponents that are in the
// argument collection:
c。removeAll(newCollection());
print(c);
c。addAll(newCollection());
print(c);
// Is an element in this Collection?
System。out。println(
〃c。contains(”4”) = 〃 + c。contains(〃4〃));
// Is a Collection in this Collection?
System。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 elements
System。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 等。
因为不管在什么情况下,新集合内都有自己首选的类。
8。7。2 使用 Lists
L i s t Order is the most important feature of a L i s t ; it promises to maintain elements
238
…………………………………………………………Page 240……………………………………………………………
(interface) in a particular sequence。 L i s t adds a number of methods to Collection that allow
insertion and removal of elements in the middle of a L i s t 。 (This is remended
only for a L i n k e d L i s t 。 ) A List will produce a ListIterator ; and using this you
can traverse the L i s t in both directions; as well as insert and remove elements
in the middle of the list (again; remended only for a L i n k e d L i s t )。
ArrayList* A L i s t backed by an array。 Use instead of V e c t o r as a general…purpose object
holder。 Allows rapid random access to elements; but is slow when inserting and
removing elements from the middle of a list。 ListIterator should be used only for
back…and…forth traversal of an A r r a y L i s t ; but not for inserting and removing
elements; which is expensive pared to L i n k e d L i s t 。
LinkedList Provides optimal sequential access; with inexpensive insertions and deletions from
the middle of the list。 Relatively slow for random access。 (Use A r r a y L i s t
instead。) Also has a d d F i r s t ( ) ; a d d L a s t ( ) ; g e t F i r s t ( ) ; g e tLast( );
r e m o v e F i r s t ( ) ; and r e m o v e L a s t ( ) (which are not defined in any interfaces or
base classes) to allow it to be used as a stack; a queue; and a dequeue。
List (接口) 顺序是 List 最重要的特性;它可保证元素按照规定的顺序排列。List 为 Collection 添加了
大量方法,以便我们在 List 中部插入和删除元素(只推荐对LinkedList 这样做)。List 也会生成一个
ListIterator (列表反复器),利用它可在一个列表里朝两个方向遍历,同时插入和删除位于列表中部的元
素(同样地,只建议对 LinkedList 这样做)
ArrayList * 由一个数组后推得到的