Chr*_*way 5 java collections list guava
说我有一个java.util.List list,我想创建一个新List加入的元素e,以年初list(即,我想缺点 e和list).例如,如果list是
[1,2,3,4]
Run Code Online (Sandbox Code Playgroud)
而e在5,再cons(e,list)会
[5,1,2,3,4]
Run Code Online (Sandbox Code Playgroud)
它的元素list和cons(e,list)共享是可以的,但list不应该被修改.
实施最简单和/或最有效的方法是cons什么?结果不可修改是可以的.允许使用Google Collections Library.
如果list是com.google.common.collect.ImmutableList?
public static<T> List<T> cons(List<T> list, T t) {
ArrayList<T> result = new ArrayList<T>(list);
result.add(0, t);
return result;
}
Run Code Online (Sandbox Code Playgroud)
编辑回应评论:由于问题是"最简单和/或最有效的方式来实施利弊",我选择了"最简单".我不会惊讶地发现有更有效的方法.将元素放在列表之前是另一种有效的方法,并且最初分配正确的大小可能会提高性能.过早优化是万恶之源.
您可以使用CompositeCollection吗?
public Collection cons(Collection c1, Collection c2)
{
CompositeCollection cons = new CompositeCollection();
cons.addComposited(c1);
cons.addComposited(c2);
return cons;
}
Run Code Online (Sandbox Code Playgroud)
这不会受到参数之一是否不可变的影响,并且仍然由原始集合 c1 和 c2 支持。
如果您需要,List我可能会执行以下操作:
public List cons(Collection c1, Collection c2)
{
ArrayList cons = new ArrayList(c1.size() + c2.size());
cons.addAll(c1);
cons.addAll(c2);
return cons;
}
Run Code Online (Sandbox Code Playgroud)