pbootcms网站模板|日韩1区2区|织梦模板||网站源码|日韩1区2区|jquery建站特效-html5模板网

是一個(gè)“無限"的迭代器設(shè)計(jì)不好?

Is an quot;infinitequot; iterator bad design?(是一個(gè)“無限的迭代器設(shè)計(jì)不好?)
本文介紹了是一個(gè)“無限"的迭代器設(shè)計(jì)不好?的處理方法,對大家解決問題具有一定的參考價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)吧!

問題描述

提供無限"的 Iterator 實(shí)現(xiàn)通常被認(rèn)為是不好的做法嗎?即對 hasNext() always(*) 的調(diào)用在哪里返回 true?

Is it generally considered bad practice to provide Iterator implementations that are "infinite"; i.e. where calls to hasNext() always(*) return true?

通常我會(huì)說是",因?yàn)檎{(diào)用代碼可能會(huì)出現(xiàn)異常行為,但在下面的實(shí)現(xiàn)中,hasNext() 將返回 true,除非調(diào)用者從列表中刪除迭代器所在的所有元素初始化為;即有一個(gè)終止條件.你認(rèn)為這是對 Iterator 的合法使用嗎?盡管我想有人可能會(huì)說它不直觀,但它似乎并沒有違反合同.

Typically I'd say "yes" because the calling code could behave erratically, but in the below implementation hasNext() will return true unless the caller removes all elements from the List that the iterator was initialised with; i.e. there is a termination condition. Do you think this is a legitimate use of Iterator? It doesn't seem to violate the contract although I suppose one could argue it's unintuitive.

public class CyclicIterator<T> implements Iterator<T> {
  private final List<T> l;
  private Iterator<T> it;

  public CyclicIterator<T>(List<T> l) {
    this.l = l;
    this.it = l.iterator();
  }

  public boolean hasNext() {
    return !l.isEmpty();
  }

  public T next() {
    T ret;

    if (!hasNext()) {
      throw new NoSuchElementException();
    } else if (it.hasNext()) {
      ret = it.next();
    } else {
      it = l.iterator();
      ret = it.next();
    }

    return ret;
  }

  public void remove() {
    it.remove();
  }
}

(迂腐)編輯

有些人評論了如何使用 Iterator 從無界序列(如斐波那契序列)生成值.但是,Java Iterator 文檔指出 Iterator 是:

Some people have commented how an Iterator could be used to generate values from an unbounded sequence such as the Fibonacci sequence. However, the Java Iterator documentation states that an Iterator is:

集合上的迭代器.

現(xiàn)在你可以說斐波那契數(shù)列是一個(gè)無限集合,但在 Java 中我會(huì)將集合等同于 java.util.Collection 接口,它提供了諸如 size() 暗示一個(gè)集合必須是有界的.因此,使用 Iterator 作為無界序列的值生成器是否合法?

Now you could argue that the Fibonacci sequence is an infinite collection but in Java I would equate collection with the java.util.Collection interface, which offers methods such as size() implying that a collection must be bounded. Therefore, is it legitimate to use Iterator as a generator of values from an unbounded sequence?

推薦答案

我認(rèn)為它完全合法 - Iterator 只是一個(gè)東西"流.為什么流必須有界?

I think it is entirely legitimate - an Iterator is just a stream of "stuff". Why should the stream necessarily be bounded?

許多其他語言(例如 Scala)都內(nèi)置了無限流的概念,并且可以對其進(jìn)行迭代.例如,使用 scalaz

Plenty of other languages (e.g. Scala) have the concept of unbounded streams built in to them and these can be iterated over. For example, using scalaz

scala> val fibs = (0, 1).iterate[Stream](t2 => t2._2 -> (t2._1 + t2._2)).map(_._1).iterator
fibs: Iterator[Int] = non-empty iterator

scala> fibs.take(10).mkString(", ") //first 10 fibonnacci numbers
res0: String = 0, 1, 1, 2, 3, 5, 8, 13, 21, 34

就最小意外原則而言,我認(rèn)為這完全取決于上下文.例如,我希望這個(gè)方法返回什么?

public Iterator<Integer> fibonacciSequence();

這篇關(guān)于是一個(gè)“無限"的迭代器設(shè)計(jì)不好?的文章就介紹到這了,希望我們推薦的答案對大家有所幫助,也希望大家多多支持html5模板網(wǎng)!

【網(wǎng)站聲明】本站部分內(nèi)容來源于互聯(lián)網(wǎng),旨在幫助大家更快的解決問題,如果有圖片或者內(nèi)容侵犯了您的權(quán)益,請聯(lián)系我們刪除處理,感謝您的支持!

相關(guān)文檔推薦

Java Remove Duplicates from an Array?(Java從數(shù)組中刪除重復(fù)項(xiàng)?)
How to fix Invocation failed Unexpected Response from Server: Unauthorized in Android studio(如何修復(fù)調(diào)用失敗來自服務(wù)器的意外響應(yīng):在 Android 工作室中未經(jīng)授權(quán))
AES encryption, got extra trash characters in decrypted file(AES 加密,解密文件中有多余的垃圾字符)
AES Error: Given final block not properly padded(AES 錯(cuò)誤:給定的最終塊未正確填充)
Detecting incorrect key using AES/GCM in JAVA(在 JAVA 中使用 AES/GCM 檢測不正確的密鑰)
AES-256-CBC in Java(Java 中的 AES-256-CBC)
主站蜘蛛池模板: 广州昊至泉水上乐园设备有限公司 | 道康宁消泡剂-瓦克-大川进口消泡剂供应商 | 广州网站建设_小程序开发_番禺网站建设_佛山网站建设_粤联网络 | 精密交叉滚子轴承厂家,转盘轴承,YRT转台轴承-洛阳千协轴承 | 轴流风机-鼓风机-离心风机-散热风扇-罩极电机,生产厂家-首肯电子 | 400电话_400电话申请_866元/年_【400电话官方业务办理】-俏号网 3dmax渲染-效果图渲染-影视动画渲染-北京快渲科技有限公司 | 建筑工程资质合作-工程资质加盟分公司-建筑资质加盟 | 压力控制器,差压控制器,温度控制器,防爆压力控制器,防爆温度控制器,防爆差压控制器-常州天利智能控制股份有限公司 | 采暖炉_取暖炉_生物质颗粒锅炉_颗粒壁炉_厂家加盟批发_烟台蓝澳采暖设备有限公司 | 碳刷_刷握_集电环_恒压簧_电刷厂家-上海丹臻机电科技有限公司 | 工业胀紧套_万向节联轴器_链条-规格齐全-型号选购-非标订做-厂家批发价格-上海乙谛精密机械有限公司 | 电缆故障测试仪_电缆故障定位仪_探测仪_检测仪器_陕西意联电气厂家 | 喷涂流水线,涂装流水线,喷漆流水线-山东天意设备科技有限公司 | 济南宣传册设计-画册设计_济南莫都品牌设计公司 | 润东方环保空调,冷风机,厂房车间降温设备-20年深圳环保空调生产厂家 | 信阳市建筑勘察设计研究院有限公司 | 长沙发电机-湖南发电机-柴油发电机供应厂家-长沙明邦智能科技 | 深圳侦探联系方式_深圳小三调查取证公司_深圳小三分离机构 | 鑫达滑石-辽宁鑫达滑石集团 | LED太阳能中国结|发光红灯笼|灯杆造型灯|节日灯|太阳能灯笼|LED路灯杆装饰造型灯-北京中海轩光电 | 污泥烘干机-低温干化机-工业污泥烘干设备厂家-焦作市真节能环保设备科技有限公司 | 头条搜索极速版下载安装免费新版,头条搜索极速版邀请码怎么填写? - 欧远全 | 常州律师事务所_常州律所_常州律师-江苏乐天律师事务所 | 集装箱展厅-住人集装箱住宿|建筑|房屋|集装箱售楼处-山东锐嘉科技工程有限公司 | 同步带轮_同步带_同步轮_iHF合发齿轮厂家-深圳市合发齿轮机械有限公司 | 悬浮拼装地板_幼儿园_篮球场_悬浮拼接地板-山东悬浮拼装地板厂家 | 春腾云财 - 为企业提供专业财税咨询、代理记账服务 | 合肥升降机-合肥升降货梯-安徽升降平台「厂家直销」-安徽鼎升自动化科技有限公司 | 纯化水设备-EDI-制药-实验室-二级反渗透-高纯水|超纯水设备 | 全自动包装秤_全自动上袋机_全自动套袋机_高位码垛机_全自动包装码垛系统生产线-三维汉界机器(山东)股份有限公司 | 心肺复苏模拟人|医学模型|急救护理模型|医学教学模型上海康人医学仪器设备有限公司 | 合肥抖音SEO网站优化-网站建设-网络推广营销公司-百度爱采购-安徽企匠科技 | 雷达液位计_超声波风速风向仪_雨量传感器_辐射传感器-山东风途物联网 | 汽车整车综合环境舱_军标砂尘_盐雾试验室试验箱-无锡苏南试验设备有限公司 | 急救箱-应急箱-急救包厂家-北京红立方医疗设备有限公司 | 户外-组合-幼儿园-不锈钢-儿童-滑滑梯-床-玩具-淘气堡-厂家-价格 | 环比机械 | 佛山商标注册_商标注册代理|专利注册申请_商标注册公司_鸿邦知识产权 | 正压密封性测试仪-静态发色仪-导丝头柔软性测试仪-济南恒品机电技术有限公司 | 模具ERP_模具管理系统_模具mes_模具进度管理_东莞市精纬软件有限公司 | 捷码低代码平台 - 3D数字孪生_大数据可视化开发平台「免费体验」 |