一个集合,表示Java中两个集合的串联

rip*_*234 5 java collections data-structures

是否有一个类表示集合与另一个集合的串联?这个类本身应该是一个Collection,并且应该将所有方法委托给底层(内部)集合 - 不应该分配额外的内存,也不应该修改任何原始集合.

用法示例:

Collection<String> foo = ...
Collection<String> bar = ...

// this should be O(1) memory and time
Collection<String> combined = concat(foo, bar);

if (combined.contains("Zee"))
  ...

for (String str : combined)
  System.out.println(str);
Run Code Online (Sandbox Code Playgroud)

Cow*_*wan 9

与任何收藏品一样,请查看google-collections.如果您有Sets,特别是(不仅仅是一般集合),您需要:

Set<String> combined = Sets.union(foo, bar);
Run Code Online (Sandbox Code Playgroud)

这会创建两组的不可修改的视图.也就是说,改变foobar将反映在combined(但combined.add()不支持等).

对于更通用的情况,你有Iterables.concat()但只是让你迭代加入的项目,Iterable界面显然不包括contains所以你有点在那里.

google-collections(com.google.common.collect.Listscom.google.common.collect.Collections2)中的其他集合实用程序类不包含任何串联方法.不明白为什么他们不能,但目前他们不这样做.

  • 我们发现99%的用户真的只需要迭代.因此Iterables.concat().在内部我们也有一个Lists.concat(),但是任何人都使用它,而且大多数人都可以使用另一个. (4认同)

Jim*_*ows 0

我不确定你问什么。我对你的问题的解释是你在集合上寻找添加方法。我不认为这就是你要问的。