目前,当我想要过滤列表时,我会使用迭代其元素并将符合我要求的元素复制到新列表,但这样我就使用了O(2N)的空间复杂度。有没有更有效的方法呢?
答案 0 :(得分:1)
如果您使用的是Java 8,则只需使用myList.stream()。filter(); 否则你可以采用Filter Pattern。
<input type="button" value="Add Word" data-bind="postJson : {token : '{{ csrf_token() }}', data : $root.wordToAdd }" />
答案 1 :(得分:0)
如果您需要保留旧列表以及构建新列表,您将始终具有O(2N)空间复杂度。
如果您不需要执行深层复制,请在新列表中存储引用。也就是说,在你的循环中,而不是newlist.add(item.deepClone())
之类的东西,只需newlist.add(item)
。
如果您不需要保留旧列表,则可能会丢弃不符合您要求的元素。例如。在你的循环内,而不是if (isAKeeper(item)) newlist.add(...)
,使用if (!isAKeeper(item)) oldList.remove(item)
。