用于保存其他集合的集合或数据结构

时间:2015-07-31 17:50:58

标签: java data-structures collections

是否有可以存储不同类型集合的数据结构?假设我有以下集合:

curs.executemany('INSERT INTO F_wheel VALUES (?)', F_wheel_data)
ValueError: parameters are of unsupported type

我将拥有多个其他集合(不知道有多少)但我需要一个单一的数据结构或所有它们的其他集合存储。因为,最后,我想循环遍历它并清空每个集合并用于另一件事而无需创建新的集合:

理想情况:让我的我有一个名为UniversalCollection的集合,然后我可以做:

ArrayList arrayL;
LinkedList linkedL;
Hashtable hashT;

由于

3 个答案:

答案 0 :(得分:1)

您可以将Collection个对象添加到您喜欢的任何现有数据结构中。举个例子,只需创建一个ArrayList<Collection>

正如评论中所述,您无法将HashtableMap直接添加到Collection个对象列表中,但可以添加entrySet为每一个作为解决方法。

List list1 = new ArrayList();
List list2 = new LinkedList();
Hashtable ht = new Hashtable();
Map map = new HashMap();

// add some data so we can see things get removed later
ht.put(new Object(), new Integer(1));
ht.put(new Object(), new Integer(2));
map.put(new Object(), new Integer(3));
map.put(new Object(), new Integer(4));

System.out.println(ht.size());
System.out.println(map.size());

Collection<Collection> coll = new ArrayList<Collection>();

coll.add(list1);
coll.add(list2);
coll.add(ht.entrySet());
coll.add(map.entrySet());

for(Collection c : coll) {
    c.clear();
}

System.out.println(ht.size());
System.out.println(map.size());

由于集合由地图(或散列表)对象支持,因此在迭代集合时对集合所做的更改将反映在映射中。

答案 1 :(得分:0)

由于您创建的所有对象都是Collection类的子类,因此您可以使用Collection数组来保存这些对象。

答案 2 :(得分:-1)

由于您的内部集合具有不同的界面,您可以使用Adapter pattern。基本上,使用单个方法Clearable创建自己的接口clear,并创建包含所有所需CollectionMap接口的实现。

所以,你的代码看起来像这样:

    interface Clearable {
        void clear();
    }

    class CollectionClearable<T> implements Clearable {

        private Collection<T> col;

        public CollectionClearable(Collection<T> col) {
            this.col = col;
        }

        @Override
        public void clear() {
            // process col
        }
    }

    class MapClearable<K, V> implements Clearable {

        private Map<K, V> col;

        public MapClearable(Map<K, V> col) {
            this.col = col;
        }

        @Override
        public void clear() {
            // process col
        }
    }

    final class ClearableFactory {
        private ClearableFactory() {
        }

        static <K, V> Clearable create(Map<K, V> map) {
            return new MapClearable<K, V>(map);
        }

        static <T> Clearable create(Collection<T> col) {
            return new CollectionClearable<T>(col);
        }
    }

最后你可以这样做:

    List<Clearable> clearables = Arrays.asList(
            ClearableFactory.create(Arrays.asList(1, 2, 3)),
            ClearableFactory.create(new HashMap<String, String>())
    );

    for (Clearable clearable : clearables) {
        clearable.clear();
    }

另请注意,具有Clearable的具体实现和工厂创建它们是没有必要的。每次要将另一个Clearable添加到目标集合并在运行中定义它的clear逻辑时,您都可以创建匿名类。