java核心技術卷I-集合框架(一)

Java集合框架

與現代的數據結構類庫的常見情況一樣, Java 集合類庫也將接口(interface) 與 實 現(implementation) 分離

隊列 (queue)

隊列接口指出可以在隊列的尾部添加元素, 在隊列的頭部刪除元素,並且可以査找隊列中元素的個數。當需要收集對象, 並按照“ 先進先出” 的規則檢索對象時就應該使用隊列

public interface Queue<E> // a simplified form of the interface in the standard library
{
	void add(E element);
	E remove();
	int size();
}

這個接口並沒有說明隊列是如何實現的。隊列通常有兩種實現方式: 一種是使用循環數組;另一種是使用鏈表。

Collection接口

在 Java 類庫中,集合類的基本接口是 Collection 接口。這個接口有兩個基本方法

public interface Collection<E>
{
	boolean add(E element);
	Iterator<E> iterator();
...
}

add方法用於向集合中添加元素。如果添加元素確實改變了集合就返回 true, 如果集合沒有發生變化就返回 false。
iterator方法用於返回一個實現了 Iterator 接口的對象。可以使用這個迭代器對象依次訪問集合中的元素。

迭代器

Iterator接口包含4個方法:

public interface Iterator<E>
{
	E next();
	boolean hasNext();
	void remove();
	default void forEachRemaining(Consumer<? super E> action);
}

通過反覆調用 next 方法,可以逐個訪問集合中的每個元素。但是,如果到達了集合的末尾,next 方法將拋出一個 NoSuchElementException。 因此,需要在調用 next 之前調用 hasNext方法。如果迭代器對象還有多個供訪問的元素, 這個方法就返回 true。如果想要査看集合中的所有元素,就請求一個迭代器,並在 hasNext 返回 true 時反覆地調用 next 方法。

Collection<String> c = . . .;
Iterator<String> iter = c.iterator();
while (iter.hasNext())
{
	String element = iter.next();
	//do something with element
}

用“ for each” 循環可以更加簡練地表示同樣的循環操作:
for (String element : c)
{
//do something with element
}
Collection接口擴展了 Iterable 接口。因此,對於標準類庫中的任何集合都可以使用“ for
each” 循環。
在 Java SE 8中,甚至不用寫循環。可以調用 forEachRemaining 方法並提供一 lambda
表達式(它會處理一個元素)。 將對迭代器的每一個元素調用這個 lambda 表達式,直到再沒有元素爲止。
Java 迭代器查找操作與位置變更是緊密相連的。查找一個元素的唯一方法是調用 next, 而在執行查找操作的同時, 迭代器的位置隨之向前移動,應該將 Java 迭代器認爲是位於兩個元素之間。 當調用 next 時,迭代器就越過下一個元素,並返回剛剛越過的那個元素的引用

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章