将Iterables转换为Collection会迭代所有元素吗?

时间:2017-01-19 23:16:18

标签: java guava

以下是import pylab # prepare the domain for the function we graph x_0 = -5.0; x_1 = +5.0; n = 100 xs = pylab.linspace(x_0, x_1, n) #print('xs: ',type(xs)) # quadratic equation def Quad(x, a = 1, b = 0, c = 0): # def providing default values for a, b, c return a*x*x + b * x + c ys = Quad(xs) # since xs <class 'numpy.ndarray'> broadcasting magic is invoked #print('ys: ',type(ys)) # Graph the function pylab.plot(xs, ys, "bo-") pylab.show() ref)的源代码:

Iterables.isEmpty()

我想知道public static boolean isEmpty(Iterable<?> iterable) { if (iterable instanceof Collection) { return ((Collection<?>) iterable).isEmpty(); } return !iterable.iterator().hasNext(); } 方法如果给定Iterables.isEmpty()参数的类型为iterable,则Set方法会迭代所有元素,其范围为Collection。将Iterable转换为Collection会导致完全迭代吗?如果是这样,为什么?如果没有,为什么不呢?

1 个答案:

答案 0 :(得分:7)

  

我想知道如果给定Iterables.isEmpty()

iterable方法是否会迭代所有元素

否:Iterables.isEmpty() is implemented as iterable.iterator().hasNext() for non-Collections。它永远不会比第一个元素更进一步。

  

将Iterable转换为Collection是否会导致完全迭代

没有。 Casting对该对象没有任何作用,它只是告诉编译器“信任你”它可以被视为子类,而不是超类。

来自JLS Sec 15.6

  

强制转换表达式...在运行时检查引用值是指其类与指定引用类型或引用类型列表兼容的对象。