Ссылка-копия коллекции Java - PullRequest
0 голосов
/ 24 февраля 2010

Существует ли стандартная реализация Java (1.5+) (т. Е. Нет третьей стороны) коллекции, которая позволяет мне склеить несколько коллекций в одну?

Вот эскиз, как это работает:

final SomeCollection x = new SomeCollection();
final ArrayList a = new ArrayList();

a.add("first");
assert(a.size() == 1);

x.embed(a); // don't know for sure, if this exists.
assert(x.size() == 1);

a.add("second");
assert(a.size() == 2);
assert(x.size() == 2); // the other array is used as a backend-collection.

final ArrayList b = new ArrayList();
b.add("third");
assert(b.size() == 1);

x.embed(b);
assert(x.size() == 3); // x is a combination of the other two lists.

Спасибо!

Ответы [ 3 ]

2 голосов
/ 24 февраля 2010

Не существует стандартной коллекции, в которой коллекции соответствуют семантике, к которой вы стремитесь.

1 голос
/ 24 февраля 2010

Во-первых, я не уверен, является ли X коллекцией объектов ArrayList или X является коллекцией, которая изменяется в соответствии с элементами, добавленными в A. Вы должны добавить немного безопасности типов (и самодокументирование) в свой код, т.е.

    final List<String> x = new ArrayList<String>();    
    final List<String> a = new ArrayList<String>();

    a.add("first");    
    assert(a.size() == 1);  

Два набора (с символом s) полны наборов, «подкрепленных» другим, например,

    Collections.unmodifiableCollection(Collection<? extends T> c)
0 голосов
/ 24 февраля 2010

Если упомянутый вами класс SomeCollection имеет тип java.util.Collection, вы можете добавить в него любую другую коллекцию. Смотрите, например. Вы можете комбинировать два разных типа коллекции следующим образом.

Vector  v = new java.util.Vector();
ArrayList alist = new java.util.ArrayList();
v.addAll(alist);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...