java泛型類,深入剖析java迭代器以及C#迭代器!

 2023-11-19 阅读 18 评论 0

摘要:? java泛型類。? 目錄: 知道迭代器接口Iterable為什么java的for增強可以自動迭代那些類可以被迭代通過什么方法迭代c++迭代器?? 1.知道迭代器接口Iterable 解析: 迭代器(iterator)是一種對象,它能夠用來遍歷標準模板庫容器中的部分或全部元素,每

?

java泛型類。?

目錄:

  1. 知道迭代器接口Iterable
  2. 為什么java的for增強可以自動迭代
  3. 那些類可以被迭代
  4. 通過什么方法迭代

c++迭代器??

1.知道迭代器接口Iterable

解析: 迭代器(iterator)是一種對象,它能夠用來遍歷標準模板庫容器中的部分或全部元素,每個迭代器對象代表容器中的確定的地址。迭代器修改了常規指針的接口,所謂迭代器是一種概念上的抽象:那些行為上像迭代器的東西都可以叫做迭代器。

?

2.為什么javafor增強可以自動迭代

解析:for增強只能迭代實現了Iterable接口的類,并且自動調用該類中的iterator()方法;

?

3.那些類可以被迭代?

解析:只要該類實現了Iterator接口或者繼承的父類實現了Iterator接口,就可以被迭代.

?

4.通過什么方法迭代

解析:因為Iterable接口中只有一個方法:iterator(),這個方法的返回值就是Iterator<T>;而Iterator接口中又定義了三個方法,分別是:hasNext,next,remove

這三個方法分別代表為

  1. hasNext();方法
public boolean hasNext() {return cursor != size();}

?

對比幀數,當調用hasNext方法的時候,跟元素個數size()進行對比,如不等于size()的時候,return true;

? ? ?2.?next();方法

public E next() {checkForComodification();try {E next = get(cursor);lastRet = cursor++;return next;} catch (IndexOutOfBoundsException e) {checkForComodification();throw new NoSuchElementException();}}

?

當hasNext()方法執行完畢后,系統自動調用next()方法,讀取下一條數據;

cursor//當前元素的索引.

E next = get(cursor);//根據當前索引,獲取值

lastRet = cursor++;//索引+1;

3.?remove();方法

public void remove() {if (lastRet == -1)throw new IllegalStateException();checkForComodification();try {AbstractList.this.remove(lastRet);if (lastRet < cursor)cursor--;lastRet = -1;expectedModCount = modCount;} catch (IndexOutOfBoundsException e) {throw new ConcurrentModificationException();}}

?

當前方法的操作:當調用這個方法的時候,刪除當前元素并且讓cursor賦值為上一個,并且讓lastRet改為-1,方便下次調用.

checkForComodification();此方法用來判斷創建迭代對象的視乎List的modCount與現在List的modCount是否一樣,不一樣的話就報出ConcurrentModificationException()異常

?

java的迭代器就先剖析到這里,接下來我們看看C#的迭代器.

IEnumerable類

public interface IEnumerable{[DispId(-4), __DynamicallyInvokable]IEnumerator GetEnumerator();}

IEnumerator類中,和java大致是一樣的,因為它也有三個方法:分別是

bool MoveNext();//就和java中的hasNext()方法大概一致
object Current { [__DynamicallyInvokable] get; }//它和java中next()方法差不多,
void Reset();//它就是java中的remove方法.?

也可以說,java的迭代器,是從C#借鑒來的,所以他倆的代碼都差不多一個概念.

轉載于:https://www.cnblogs.com/zhuangbiing/p/4911846.html

版权声明:本站所有资料均为网友推荐收集整理而来,仅供学习和研究交流使用。

原文链接:https://hbdhgg.com/1/180722.html

发表评论:

本站为非赢利网站,部分文章来源或改编自互联网及其他公众平台,主要目的在于分享信息,版权归原作者所有,内容仅供读者参考,如有侵权请联系我们删除!

Copyright © 2022 匯編語言學習筆記 Inc. 保留所有权利。

底部版权信息