Java 數(shù)據(jù)結(jié)構(gòu)算法Collection接口迭代器示例詳解
Java合集框架
數(shù)據(jù)結(jié)構(gòu)是以某種形式將數(shù)據(jù)組織在一起的合集(collection)。數(shù)據(jù)結(jié)構(gòu)不僅存儲(chǔ)數(shù)據(jù),還支持訪問(wèn)和處理數(shù)據(jù)的操作
在面向?qū)ο蟮乃枷肜铮环N數(shù)據(jù)結(jié)構(gòu)也被認(rèn)為是一個(gè)容器(container)或者容器對(duì)象(container object),它是一個(gè)能存儲(chǔ)其他對(duì)象的對(duì)象,這里的其他對(duì)象常被稱為數(shù)據(jù)或者元素
定義一種數(shù)據(jù)結(jié)構(gòu)從實(shí)質(zhì)上講就是定義一個(gè)類。數(shù)據(jù)結(jié)構(gòu)類應(yīng)該使用數(shù)據(jù)域存儲(chǔ)數(shù)據(jù),并提供方法支持查找、插入和刪除等操作
Java 提供了很多能有效地組織和操作數(shù)據(jù)的數(shù)據(jù)結(jié)構(gòu)。這些數(shù)據(jù)結(jié)構(gòu)通常稱為 Java 合集框架(Java Collections Framework)
Collection接口
Collection 接口為線性表、向量、棧、隊(duì)列、優(yōu)先隊(duì)列以及集合定義了共同的操作
Set 和 List 是 Collection 的子接口
下面是實(shí)現(xiàn) Collection 的子接口、實(shí)現(xiàn)子接口的抽象類以及后面的具體類
Collection 接口中定義了以下方法:
方法及返回類型 | 描述 |
---|---|
add(o: E) : boolean | 添加一個(gè)新的元素 o 到合集中 |
addAll(c: Collection<? extends E>) : boolean | 將合集 c 中的所有元素添加到該合集中 |
clear() : void | 從該合集刪除所有元素 |
contains(o: Object) : boolean | 如果該合集包含元素 o,則返回 true |
containsAll(c : Collection<?>) : boolean | 如果該合集包含 c 中所有的元素,則返回 true |
equals(o: Object) : boolean | 如果該合集等同于另外一個(gè)合集 o,則返回 true |
hashCode() : int | 返回該合集的哈希碼 |
isEmpty() : boolean | 如果該合集沒(méi)有包含元素,則返回 true |
remove(o: Object) : boolean | 從該合集中移除元素 o |
removeAll(c: Collectioin<?>) : boolean | 從該合集中移除 c 中的所有元素 |
retainAll(c: Collectioin<?>) : boolean | 保留同時(shí)位于 c 和該合集中的元素 |
size() : int | 返回該合集中的元素?cái)?shù)目 |
toArray() : Object[] | 為該合集中的元素返回一個(gè) Object 數(shù)組 |
Collection 接口提供了在集合中添加與刪除元素的基本操作。add 方法給合集添加一個(gè)元素,addAll 方法把指定合集中的所有元素添加到這個(gè)合集中,remove 方法從元素中刪除一個(gè)元素,removeAll 方法從這個(gè)合集中刪除指定合集中的所有元素,retainAll 方法保留既出現(xiàn)在這個(gè)合集中也出現(xiàn)在指定合集中的元素。所有這些方法都返回 boolean 值,如果執(zhí)行方法改變了這個(gè)合集,那么返回值為 true。clear 方法簡(jiǎn)單地移除合集中的所有元素
方法 addAll、removeAll、retainAll 類似于集合上的并、差、交運(yùn)算
Collection 接口提供了多種查詢操作,方法 size 返回合集中元素的個(gè)數(shù),方法 contains 檢測(cè)合集中是否包含指定的元素,方法 containsAll 檢測(cè)這個(gè)合集中是否包含指定合集中的所有元素。如果合集為空,方法 isEmpty 返回 true
Collection 接口的 toArray 方法返回一個(gè)合集的數(shù)組表
迭代器
每種合集都是可迭代的(Iterable),可以獲得合集的 Iterator 對(duì)象來(lái)遍歷合集中的所有元素
Iterator 是一種經(jīng)典的設(shè)計(jì)模式,用于在不需要暴露數(shù)據(jù)是如何保存在數(shù)據(jù)結(jié)構(gòu)的細(xì)節(jié)的情況下,來(lái)遍歷一個(gè)數(shù)據(jù)結(jié)構(gòu)
Iterable 接口中定義了以下方法:
方法及返回類型 | 描述 |
---|---|
iterator() : Iterator<E> | 為該合集中的元素返回一個(gè)迭代器 |
Iterator 接口中定義了以下方法:
方法及返回類型 | 描述 |
---|---|
hasNext() : boolean | 如果該迭代器還要遍歷更多元素,則返回 true |
next() : E | 返回該迭代器中的下一個(gè)元素 |
remove() : void | 移除使用 next 方法獲取的上一個(gè)元素 |
Collection 接口繼承自 Iterable 接口,Iterable 接口定義了 iterator 方法,該方法會(huì)返回一個(gè)迭代器
而 Iterator 接口為遍歷各種類型的合集中的元素提供了一種統(tǒng)一的方法,Iterator 接口中的 iterator() 方法會(huì)返回一個(gè) Iterator 的實(shí)例,這個(gè)實(shí)例可以使用 next() 方法對(duì)合集中的元素進(jìn)行順序訪問(wèn),使用 hasNext() 方法來(lái)檢測(cè)迭代器中是否還有更多的元素,以及使用 remove() 方法來(lái)移除迭代器返回的最后一個(gè)元素
寫一個(gè)案例感受一下迭代器的魅力
import java.util.ArrayList; import java.util.Collection; import java.util.Iterator; public class TestIterator { public static void main(String[] args) { Collection<String> collection = new ArrayList<>(); collection.add("Hello"); collection.add("World"); collection.add("Java"); //遍歷方法一 Iterator<String> iterator = collection.iterator(); while (iterator.hasNext()) { System.out.println(iterator.next().toUpperCase()); } //遍歷方法二 for (String c : collection) { System.out.println(c.toUpperCase()); } } }
運(yùn)行結(jié)果如下
以上就是Java 數(shù)據(jù)結(jié)構(gòu)算法Collection接口迭代器示例詳解的詳細(xì)內(nèi)容,更多關(guān)于Java Collection接口迭代器的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
- Java?C++?算法題解leetcode145商品折扣后最終價(jià)格單調(diào)棧
- Java算法真題詳解運(yùn)用單調(diào)棧
- java數(shù)據(jù)結(jié)構(gòu)循環(huán)隊(duì)列的空滿判斷及長(zhǎng)度計(jì)算
- java數(shù)據(jù)結(jié)構(gòu)與算法數(shù)組模擬隊(duì)列示例詳解
- java數(shù)據(jù)結(jié)構(gòu)算法稀疏數(shù)組示例詳解
- java數(shù)據(jù)結(jié)構(gòu)圖論霍夫曼樹及其編碼示例詳解
- 特殊數(shù)據(jù)結(jié)構(gòu)之使用Java實(shí)現(xiàn)單調(diào)棧示例
相關(guān)文章
Java 實(shí)戰(zhàn)練手項(xiàng)目之校園超市管理系統(tǒng)的實(shí)現(xiàn)流程
讀萬(wàn)卷書不如行萬(wàn)里路,只學(xué)書上的理論是遠(yuǎn)遠(yuǎn)不夠的,只有在實(shí)戰(zhàn)中才能獲得能力的提升,本篇文章手把手帶你用java+SSM+Mysql+Maven+Bootstrap實(shí)現(xiàn)一個(gè)校園超市管理系統(tǒng),大家可以在過(guò)程中查缺補(bǔ)漏,提升水平2021-11-11Docker 部署 SpringBoot 項(xiàng)目整合 Redis 鏡像做訪問(wèn)計(jì)數(shù)示例代碼
這篇文章主要介紹了Docker 部署 SpringBoot 項(xiàng)目整合 Redis 鏡像做訪問(wèn)計(jì)數(shù)Demo,本文給大家介紹的非常詳細(xì),具有參考借鑒價(jià)值,需要的朋友可以參考下2018-01-01Springboot整合MongoDB進(jìn)行CRUD操作的兩種方式(實(shí)例代碼詳解)
這篇文章主要介紹了Springboot整合MongoDB進(jìn)行CRUD操作的兩種方式,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-04-04SpringBoot源碼分析之bootstrap.properties文件加載的原理
本文通過(guò)訪問(wèn)看到bootstrap.properties中的信息獲取到了,同時(shí)age也被application.properties中的屬性覆蓋掉了。加載順序到底是什么?為什么會(huì)覆蓋呢?我們接下來(lái)分析下吧2021-12-12Java實(shí)現(xiàn)鎖定某個(gè)變量的幾種方式示例詳解
這篇文章主要為大家介紹了Java實(shí)現(xiàn)鎖某個(gè)變量的幾種方式示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-09-09