java - Iterable vs Iterator 作为返回行为(最佳实践?)

标签 java list collections iterator iterable

我只想知道您对将所有 Collections 函数输出更改为 Iterable 类型的看法。

在我看来,这可能是当今 Java 中最常见的代码,每个人在 99% 的时间里总是返回一个 List/Set/Map,但不应该是返回类似

的标准
    public final Iterable<String> myMethod() {
            return new Iterable<String>() {
                  @Override
                  public Iterator<String> iterator() {return myVar.getColl();}
            };
    }

这很糟糕吗?你知道所有的 DAO 类,这些东西就像

    Iterable<String> getName(){}
    Iterable<Integer> getNums(){}
    Iterable<String> getStuff(){}

代替

    List<String> getName(){}
    List<Integer> getNums(){}
    Set<String> getStuff(){}

毕竟,99% 的时候你会在 for 循环中使用它...

你怎么看?

最佳答案

这将是一个非常糟糕的计划。

我不会说 90% 的时间您只是在 for 循环中使用它。可能是 40-50%。其余时间,您需要更多信息:sizecontainsget(int)

此外,返回类型本身就是一种文档。返回 Set 保证元素是唯一的。返回一个 List 说明元素的顺序一致。

我不建议返回特定的集合实现,如 HashSetArrayList,但我通常更愿意返回 SetList 而不是 CollectionIterable,如果该选项可用的话。

关于java - Iterable vs Iterator 作为返回行为(最佳实践?),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10581092/

相关文章:

java - Java Collection.sort 错误

java - 操作集合的最佳实践

java - iBatis SqlMapClient 和线程安全

c - 从列表中删除值

Java - 不同时区的当前时间

java - 此处不允许使用 Void-type 错误

c++ - STL 列表访问倒数第二个元素

java - 乘以 if 语句与 collection.contains

java - 二维平面中的 K 最近邻

java - Java 中的 volatile 关键字真的与缓存有关吗?