【问题标题】:How to implement vector of arrays in Java?如何在 Java 中实现数组向量?
【发布时间】:2011-10-05 12:52:38
【问题描述】:

我想在 Java 中有一个可调整大小的结构来保持一维数组或双精度类型的向量。最好的方法是什么?

是否可以将数组作为参数传递给 Arraylist?可能是一个向量?

如果不是什么是相当合理的解决方案?

毕竟,根据建议的实现,从结构中获取值并将它们用于计算(添加数组、乘以数组等)的最有效方法是什么。

【问题讨论】:

  • 你为什么要找向量,你是在处理同步对象吗?
  • 是的,你当然可以拥有List<double[]> myList = new ArrayList<double[]>(); 我不认为这有什么本质上的问题。如果你需要一个数组列表,那么你需要一个数组列表

标签: java arrays vector arraylist


【解决方案1】:

您可以使用 ArrayList 但是您可能会发现 TDoubleArrayList 更有效,因为它包装了 double[]

【讨论】:

    【解决方案2】:

    使用泛型,您可以传递任何type,它是java.lang.Object. 的子类(Java 原始类型不是java.lang.Object 的子类)

    ArrayList<ArrayList<Double>> doubles=new ArrayList<ArrayList<Double>>();
    //or
    Vector<Double> doubles=new ArrayList<Double>();
    

    当然你也可以传递数组对象。

    ArrayList<String[]> obj=new ArrayList<String[]>();
    

    【讨论】:

      【解决方案3】:

      创建一个包含对其他 ArrayList 的引用的 ArrayList,如下所示:

      List<List<Double>> listOfLists = new ArrayList<List<Double>>();
      
      List<Double> doubleList = new ArrayList<Double>();
      
      listOfLists.add(doubleList);
      

      您不应该创建数组列表,因为集合和数组不能很好地混合。

      编辑

      Vector 已被有效弃用。请改用 ArrayList。

      【讨论】:

      • 我不同意集合和数组的混合
      【解决方案4】:

      我可能会使用ListMultmap

      ListMultimap<Integer, Double> listOfLists;
      

      整数键将是您的索引(0、1、2 等)。此结构负责为您创建内部列表。它将检查一个列表是否已经存在于索引中,并在适当的情况下在插入之前创建。

      【讨论】:

        【解决方案5】:

        这是用于矩阵吗?如果是这样,请查看JAMACERN Colt,而不是尝试自己动手。

        【讨论】:

          【解决方案6】:

          可能有List&lt;List&lt;Double&gt;&gt;List&lt;Double[]&gt;

          您应该使用更现代的List/ArrayList 而不是Vector

          最有效的选择取决于您到底想用它做什么,但最初,您应该查看List 接口的实现

          【讨论】:

            【解决方案7】:

            Java 的数组 对象,所以任何可以传递Object 的地方,都可以传递数组。 ArrayList 非常适合构建有序的数组序列;不要使用Vector,除非你有一个旧的 API 正在编码(或者你需要它实现的确切类型的同步;你可能不想要那个)。

            在内部,ArrayList 包含 Object 引用数组。

            如果您正在处理矩形矩阵或稀疏数组,则可以有更好的方法来实现。如果使用单个数组而不是数组数组(或更糟糕的是,ArrayLists 的ArrayList)实现矩阵,则矩阵会产生更少的开销,但是您必须做更多的工作来隐藏这个事实。稀疏数组最好作为 Map 的变体来完成(这本身就是一件有点昂贵的事情,但可以通过省略大量存储来节省)。

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 2013-02-01
              • 1970-01-01
              • 1970-01-01
              • 2016-05-12
              • 2013-11-20
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多