需要数据结构来存储3个数据集

时间:2012-09-28 06:51:22

标签: java arrays data-structures

我有3个数据集,比如A B和C. A包含5个元素的单个数组。 B包含2D数组,C也包含2D数组。 A包含5个独立于B和C的元素。 对于A中的每个元素,数组在B中关联,对于该B数组中的每个元素,数组在C中关联。所以我想将这些数据集存储在数据结构中,以便在A中选择一个元素在B中给出适当的元素数组,并选择B数组中的元素应该给出C的元素..任何人都可以建议我...我正在使用java编程语言来实现这个数据结构..

2 个答案:

答案 0 :(得分:1)

如果我理解正确,你正在寻找从A的元素到B的元素以及从C到C的元素的映射。实现这个的最简单方法是使用一些HashMaps或其他任何实现Map接口的类,例如:

List<TypeA> a = new ArrayList<TypeA>();
Map<TypeA, List<TypeB>> b = new HashMap<TypeA, List<TypeB>>();
Map<TypeB, List<TypeC>> c = new HashMap<TypeB, List<TypeC>>();

这样,a只是您的数组 A b将元素从a映射到列表,列表是2D数组 B 中的行。同样,c将这些行中的元素映射到列表,列表是 C 中的行。

或者,您可以对所有三个使用单个嵌套Map

Map<TypeA, Map<TypeB, List<TypeC>>> abc = 
        new HashMap<TypeA, Map<TypeB, List<TypeC>>>;

这样,abc中的键对应于您的数组 A 。每个键的值也是一个映射,其键是 B 中与 A 中的元素对应的行的元素。最后,每个键的值是 C 中与 B 中的元素对应的行。

请注意,Map中的键没有排序,因此如果订单很重要(例如,如果您必须以任何特定顺序迭代 A ,或者您必须通过某些索引访问它们)你应该使用第一个解决方案。如果订单对bc也很重要,您可以尝试这样做:

List<TypeA> a = new ArrayList<TypeA>();
List<List<TypeB>> b = new ArrayList<List<TypeB>>();
List<List<TypeC>> c = new ArrayList<List<TypeC>>();
Map<TypeA, Integer> ab = new HashMap<TypeA, Integer>();
Map<TypeB, Integer> bc = new HashMap<TypeB, Integer>();

此处,abc直接对应您的 A B C (如果您知道他们将拥有多少元素,您也可以使用数组)。然后abbc保存a(或b)的每个元素到b(或c)中相应索引的映射。请注意,每当您将元素插入abbc时,您都必须更新ab

因此,如果订单不重要,我会推荐第二个解决方案,因为这样您就不必“同步”ab和{{ 1}}。

答案 1 :(得分:0)

//         <Value, index in A>
vector<pair<Value, int>> A;
//                <Value, index in C>  
vector<vector<pair<Value, int>> B;
//            Values in C
vector<vector<Value>> C;

如果我对你的问题的理解是正确的,那么在C ++中我会做到以上几点,不确定Java。