【问题标题】:Which collection is better to store data from multi-dimensional array?哪个集合更适合存储多维数组中的数据?
【发布时间】:2012-05-15 16:26:24
【问题描述】:

我有一个multi-dimensional array of string。我愿意将其转换为某种集合类型,以便我可以根据自己的意愿添加、删除和插入元素。在数组中,我无法删除特定位置的元素。

我需要这样的集合,我可以在其中删除特定位置的数据,也可以在任何位置添加数据。
另外别忘了我有多维数组,所以集合也应该能够存储多维数据。
哪个系列适合我的要求?

【问题讨论】:

  • 我的数据是String格式,即。 ("yes","abbbc")
  • 它是一个稀疏数组(即大多数单元格是空的)吗?是否需要遍历所有非空元素?

标签: java collections multidimensional-array


【解决方案1】:

ArrayList 应该做你需要的。例如:

List<List<String>> stringList = new ArrayList<List<String>>();  //A List to store a list of strings

或者...

List<String[]> myNumberList = new ArrayList<List<String[]>();   //A List to store arrays of Strings.

【讨论】:

  • 我可以通过位置访问arraylist中的数据吗?
  • @Sachin Mhetre :Lists 按位置可访问的Collections 排序。 See the API for List
  • @SachinMhetre:是的,你可以......我已经为你提供了一个指向 Javadoc 的链接......你至少可以自己检查一下......
【解决方案2】:

与任何问题一样,数据结构有多种选择,您必须根据它们的权衡(时间、空间)做出设计决策。

立即想到的两个数据结构是ArrayListLinkedList。使用LinkedList,您可以insertremove 来自O(1) constant time 中任何位置的元素。对于ArrayList,这将是线性时间 O(n)。

但是,访问ArrayList 中的元素是恒定时间(您可以对其进行索引)。然而,通常使用 LinkedList 您需要遍历它。 LinkedList 中的这个问题虽然可以通过 hashing 每个元素来避免,但您可以在 amortized constant time 中的 linked list 中找到特定节点。当然,拥有hashlinked list 是比array 更快的解决方案,尽管在空间方面有更多开销。

有关这些数据结构的更多信息:ArraysLinked ListsHash Tables
Java 这些数据结构的实现:ArrayListLinkedListHash table

【讨论】:

  • 我在找链表,但是链表支持存储多维数组数据吗?
  • Linked list 是一种数据结构,可以保存任何类型的数据。
  • 你能更清楚你所说的“多维”是什么意思吗?有几个维度?您希望执行什么样的数据操作?
  • 我不是在说类型,我是说链表node可以保存多个数据,即。
  • 当然!! (单独)linked list 中的每个 node 通常有两个成员 - datapointer 到下一个 nodedata 可以是任何classobject。当然,如果您愿意,您也可以选择在每个节点中添加额外的数据成员(就像您提到的 - 两个 string 数据成员,一个 integerpointer),但是,我强烈建议您制作使用javaobject-oriented 性质:)
【解决方案3】:

你确定你有多维数组吗?因为我在寻找您的样本数据("yes","abbbc"),所以它适用于 一维 数组。但是让我举个例子:

    // This example for multi-dimensional array of string
    String[][] arrays = new String[][]{{"aa", "bb", "cc"}, {"dd", "ee", "ff"}};
    Map<Integer, List<String>> map = new HashMap<>();

    List<String> list;

    for(int i = 0; i < arrays.length; i++) {
        list = Arrays.asList(arrays[i]);

        map.put(i, list);
    }

    for(int i = 0; i < map.size(); i++) {
        for(int j = 0; j < map.get(i).size(); j++) {
            System.out.println(map.get(i).get(j));
        }
    }

    // This example for one-dimensional array of string
    String[] arr = new String[] {"aa", "bb"};
    List<String> listArr = Arrays.asList(arr);

    for(String str : listArr) {
        System.out.println(str);
    }

对于多维数组,我使用HashMap,对于一维数组,我使用ArrayList。如果您仍然不了解这两者,请阅读this。如果我错了,请纠正我

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-12-29
    • 2014-05-15
    • 2016-02-02
    • 2010-11-27
    • 1970-01-01
    • 2015-01-19
    • 2018-01-19
    相关资源
    最近更新 更多