list1.addAll(list2)增长并突变list1以包含list2的元素。如果list2有 m 个元素,那么list1.addAll(list2)的内存消耗将增长O(m)。 更直观地说,如果你有:
list1 list2
+---+---+---+---+ +---+---+
| o | o | o | o | | o | o |
+-|-+-|-+-|-+-|-+ +-|-+-|-+
| | | | | |
v v v v v v
A B C D E F
那么list1.addAll(list2)将产生:
list1 list2
+---+---+---+---+---+---+ +---+---+
| o | o | o | o | o | o | | o | o |
+-|-+-|-+-|-+-|-+-|-+-|-+ +-|-+-|-+
| | | | | | | |
v v v v \ \______|__ |
A B C D \ ______/ \|
\ / |
| v
v F
E
2条答案
按热度按时间mrfwxfqh1#
延迟加载(在本例中为延迟串联)意味着某些资源在必要之前不会被评估。相比之下,急切加载(或急切串联)意味着资源被完全评估。
因此,惰性串联意味着已知要执行串联,但其最终评估被推迟到需要时。此外,急切级联意味着整个级联过程完全完成。
tpxzln5u2#
list1.addAll(list2)
增长并突变list1
以包含list2
的元素。如果list2
有 m 个元素,那么list1.addAll(list2)
的内存消耗将增长O(m)。更直观地说,如果你有:
那么
list1.addAll(list2)
将产生:请注意,在此之后改变
list2
不会影响list1
的内容。list1.followedBy(list2)
返回一个Iterable
(* 不是 * 一个List
)。当迭代Iterable
时,将迭代list1
,然后迭代list2
。list1.followedBy(list2)
不会改变list1
,因此不应分配新的List
。list1.followedBy(list2)
的内存消耗将增长O(1),因为没有List
s增长或创建。在这种情况下,之后对
list2
进行突变 * 将 * 影响followedBy
返回的Iterable
: