【发布时间】:2011-02-15 21:10:14
【问题描述】:
许多 Java 框架类实现 Iterable,但 String 没有。迭代 String 中的字符是有意义的,就像可以迭代常规数组中的项目一样。
String 没有实现Iterable 有什么原因吗?
【问题讨论】:
-
遍历字符串的 char 数组的问题在哪里? (strInput.ToCharArray)
-
Tim: String#toCharArray 创建一个包含字符串字符副本的数组。即使它有效,它也会增加不必要的开销来迭代字符。
-
@jambjo
Iterator<Character>开销会更少??? -
@Tom:视情况而定,Iterator
的开销可能比 toCharArray 小很多 -
@Tom:正如我所说,这取决于情况:如果您有一个长字符串并使用枚举器仅获取几个条目,那会好得多。极端样本:例如如果您有一个 1GB 的字符串并使用枚举器来获取前 100 个字符 100 次,那么在枚举器的情况下您基本上会有 10,000 次访问,但是当使用 toCharArray 时,您将拥有 100 个字符串副本,仅此一项就会导致 5,000,000,000 次访问和您仍然需要迭代,因此它将是 10,000 对 5,000,010,000。很清楚哪个更好,不是吗(是的,这是一个构造的极端情况)