java数据结构,用于存放多个int数组及其标签

时间:2015-11-09 22:29:44

标签: java arrays data-structures

我输入的内容如下:

0, 0, 0, 0, 1, 0, 2,     A
0, 0, 3, 0, 1, 0, 2,     A
0, 2, 0, 0, 1, 0, 2,     B
0, 0, 0, 0, 1, 0, 2,     A

将字母作为标签,然后将数字作为输入。

我希望将整个矩阵存储在一个数据结构中,以便对应于特定标签的输入可以与之相关联。

怎么做?

使用2d阵列?

使用数组列表?

的Hashmap?

4 个答案:

答案 0 :(得分:2)

如果你想使用A, B,...作为键,你可以使用带字符串作为键的HashMap和作为值的arraylist

Map<String, List<String>> map = new HashMap<String, List<String>>();

然后,您可以迭代输入并检查地图是否已包含密钥。

for (...) {
    ...
    if (!map.containsKey(key)) {
        map.put(key, new ArrayList<String>());
    }
    map.get(key).add(value);
}

这是一个通用示例,您可以根据自己的要求进行修改。

答案 1 :(得分:1)

您可以使用HashMap:

Map<char, String[][]> matrix = new HashMap<char, String[]>();

matrix.put('A', new String[][]{{0, 0, 0, 0, 1, 0, 2}, {0, 0, 3, 0, 1, 0, 2}, ...});
......

这样,许多数组可以与单个标签(或字符)相关联。

答案 2 :(得分:1)

HashMap不适合您的案例,因为任何属性都没有唯一性。创建一个具有2个属性的类:

Class Obj {
    char[] array;
    String label;
}

然后将这些对象的列表维护为ArrayList

答案 3 :(得分:1)

如果您需要int数组,只需替换以下代码:

import java.util.ArrayList;

class Group {

   public String key;
   public String value;

   public String getKey() {
      return key;
   }

   public String getValue() {
      return value;
   }

   Group(String v, String k) {
      this.key = k;
      this.value = v;
   }

   @Override
   public String toString() {
      return this.key + " " + this.value;
   }
}

public class Datastructure {

   public static void main(String[] args) {
      ArrayList<Group> list = new ArrayList<>();
      list.add(new Group("0, 0, 0, 0, 1, 0, 2", "A"));
      list.add(new Group("0, 0, 3, 0, 1, 0, 2", "A"));
      list.add(new Group("0, 2, 0, 0, 1, 0, 2", "B"));
      list.add(new Group("0, 0, 0, 0, 1, 0, 2", "A"));

      findKeyList(list, "A");
   }

   public static void findKeyList(ArrayList<Group> list, String search) {
      if (!list.isEmpty()) {
         for (Group element : list) {
            if (element.getKey().equals(search)) {
               System.out.println(element.toString());
            }
         }
      }
   }

}