Github user dkuppitz commented on the issue:
https://github.com/apache/tinkerpop/pull/920
I can see why `Collections.addAll(...)` would be faster than
`c.addAll(Arrays.asList(...))`, but not why it would be faster than a simple
loop. I think if you really want to squeeze out as much as possible, you should
prevent the use of lists altogether (ultimately the list is converted back to
an array, so there's really no point of dealing with lists there, other than
making the code more readable).
Only having arrays could look like this:
```java
default GraphTraversal<S, E> hasId(final Object id, final Object...
otherIds) {
if (id instanceof P)
return this.hasId((P) id);
else {
Object[] ids;
if (id instanceof Object[]) {
ids = (Object[]) id;
} else {
ids = new Object[] {id};
}
int size = ids.length;
int capacity = size;
for (final Object i : otherIds) {
if (i.getClass().isArray()) {
final Object[] tmp = (Object[]) i;
int newLength = size + tmp.length;
if (capacity < newLength) {
ids = Arrays.copyOf(ids, capacity = size + tmp.length);
}
System.arraycopy(tmp, 0, ids, size, tmp.length);
size = newLength;
} else {
if (capacity == size) {
ids = Arrays.copyOf(ids, capacity = size * 2);
}
ids[size++] = i;
}
}
if (capacity > size) {
ids = Arrays.copyOf(ids, size);
}
this.asAdmin().getBytecode().addStep(Symbols.hasId, ids);
return TraversalHelper.addHasContainer(this.asAdmin(), new
HasContainer(T.id.getAccessor(), ids.length == 1 ? P.eq(ids[0]) :
P.within(ids)));
}
}
```
This is untested and thus not benchmarked, I'm just guessing that it should
perform better than the current implementation.
---