2010-02-24 2 views
0

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

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

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. 

Спасибо!

+1

Непревзойденное выполнение. (Простой «нет» был недостаточно длинным.) :) – PSpeed

ответ

2

Существует не стандартная коллекция, в которой хранятся коллекции с семантикой, которой вы пользуетесь.

1

Один, я не уверен, что 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

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

Vector v = new java.util.Vector(); 
ArrayList alist = new java.util.ArrayList(); 
v.addAll(alist); 
+0

Он не будет отражать изменения с ArrayList обратно в вектор, что было той функцией, которая мне нужна. Я изменил дизайн кода; Мне больше не нужен этот тип коллекции. Было бы неплохо, если скоро будет реализация Java для такой коллекции, я могу представить себе больше людей, чем мне это нужно. – Pindatjuh