飞镖新手问题。
List是Iterable的子类,某些list方法返回Iterable而不是List,例如List的where方法。如果将变量声明为List,则必须toList在许多地方调用。
始终将变量声明为Iterable类型而不是List(或任何其他子类型)更好,这样我们的代码是通用的并且易于更改吗?这样做有什么缺点吗?这更像是一个最佳实践问题。
编辑
在我的代码库中将一些List更改为Iterable之后,我发现Iterable实例没有add方法。顾名思义,它仅用于迭代。好明显
您应该将变量声明为提供功能并保证所需的最精确的类型。
List保证有效的长度和随机访问操作,并提供对sort和之类的功能的访问,shuffle仅当它们从一开始就可以访问所有元素时才有效。之所以选择它们,List是因为如果它们处于on状态Iterable,那么每一个有效的实现都将从开始toList获取列表开始。
您应该以相同的方式思考代码:如果您想要或期望一个列表,请将其键入为List。如果可以处理任何集合,请使用Iterable-,这通常意味着您所使用的操作都可以通过一个for-inover元素来实现。如果在使用它之前总是打算将一个可迭代对象转换为列表,则最好将变量键入为List以确保记住要创建列表。
或者,简而言之,如果您不在乎它实际上是Set还是Queue或,LinkedList或者它是否不可修改或惰性,可以将其设置为Iterable。
(你应该还是一般只迭代一个可迭代一次-你想用它两倍的时刻,这是可能的,你会更好,从它创建一个保证无延迟的集合-并且List是创造最廉价的集合)。
列表是具有长度的对象的可索引集合。
List<E> class
Run Code Online (Sandbox Code Playgroud)
可迭代的是可以顺序访问的值或“元素”的集合。
Iterable<E> class
Run Code Online (Sandbox Code Playgroud)
通过获取Iterator可以访问iterable的元素
Iterator<E> class
Run Code Online (Sandbox Code Playgroud)
现在,您可以看到iterable没有任何添加方法。这是故意的。使用iterable有以下好处:
注意:Iterable和Iterator类支持for-in循环。每当创建一个可以提供for-in循环中使用的Iterator的类时,都要扩展(如果可能)或实现Iterable。实现Iterator定义实际的迭代能力。
| 归档时间: |
|
| 查看次数: |
3160 次 |
| 最近记录: |