繁体   English   中英

多维数组或多维数组列表

[英]Multidimensional Array or Multidimensional arraylist

我的代码中有一个问题,我需要将四个双打与其他四个双打进行比较。 我尝试为此创建一个四维数组:

double[][][][] myArray = new double[][][][] {{{{1.1}, {1.2}, {1.3},{1.4}}}};

但是问题是我不知道数组的大小,我需要能够动态地向其中添加元素。 我不熟悉数组列表,但我想知道这是否是解决方案? 您可以拥有多维数组列表吗?

编辑以提供对该问题的更好解释:

我之所以有四个双打,是因为它们存储了令人难以置信的旅程。

Double 1 = lattitude of start location. 
Double 2 = longitude of start location.
Double 3 = lattitude of end location. 
Double 4 = longitude of end location.

因此,我有4个与比赛相关的双打,我需要能够获取这些值并将它们与其他4个双打的集合进行比较,以查看这些位置是否在合理的距离内。 我已经解决了问题的这一方面。 我只是想将一组4个双打与n个其他双打进行比较。 我最终希望能够互相抵消,以确定它们是否相似。

首先,没有理由使用4维数组。 没有冒犯,但是这种代码很难看!

若要将元素动态添加到数组,请使用ArrayList<Double> 此数据结构没有固定大小。 您可以像这样初始化它:

List<Double> dblList = Arrays.asList(1.1, 1.2, 1.3, 1.4);

要么

List<Double> dblList = new ArrayList<Double>(new Double[] {1.1, 1.2, 1.3, 1.4});

更新

抱歉,我刚刚意识到您想相互比较多个列表。 但是,这个答案应该可以为您提供帮助。

要相互比较4个双打的集合,您不需要4个维度,而只需要2个。第一个维度是用于您拥有许多双打的集合,而第二个维是用于每个4个双打的。

double[][] myArray = new double[2 /*sets*/][4 /*doubles each*/] = {
    {1.1, 1.2, 1.3, 1.4}, {2.1, 2.2, 2.3, 2.4}};

如果需要添加到列表,则可能需要ArrayList<ArrayList<Double>>因此可以添加4个双精度的列表。 或者,也许是ArrayList<double[]>以便您可以将每个包含4个double的数组添加到不断增长的ArrayList

如果一切顺利,您想要的是一个包含四个double的对象的集合。

这可以使用包含某些Double ListList来表示。 这样,您可以使用Java的Collection API的内置equalshashcode方法对List<Double>进行操作。 因此,您可以使用如下代码:

List<List<Double>> dblList = new ArrayList<List<Double>>();

并添加一些四个Double列表。 这种方法的主要优点是,您可以使用List接口的equals方法检查两个子列表的equals性。

我对术语“集合”感到有些困惑,因为这意味着双精度值的顺序无关紧要。 根据您对问题的更新,我认为顺序确实很重要。

如果您只想遍历现有值并调用您的方法,那将非常简单:

List<List<Double>> doubles = new ArrayList<List<Double>>();
doubles.add(Arrays.asList(1.1, 1.2, 1.3, 1.4));
doubles.add(Arrays.asList(2.1, 1.2, 1.3, 1.4));
doubles.add(Arrays.asList(1.1, 1.2, 1.3, 1.4));
doubles.add(Arrays.asList(3.1, 1.2, 1.3, 1.4));

List<Double> newValue = Arrays.asList(1.1, 1.2, 1.3, 1.4);
for (List<Double> vals : doubles) {
    compareJourneys(newValue, vals); //this is your comparison method
}

如果事实证明我误解了您对“ set”一词的使用,则可以使用List<Set<Double>>而不是List<List<Double>>

根据我对您问题的了解,我认为多维数组不适合。 假设您有四个双打,每个双打都有重要意义,那么也许将它们分组为一个类会更有意义。 例如...

class JourneyCoords {
 private double latStart;
 private double latEnd;
 private double longStart;
 private double longEnd;
 JourneyCoords(double latStart,double latEnd,double longStart, double longEnd){
  this.latStart = latStart;
  this.latEnd = latEnd;
  this.longStart = longStart;
  this.longEnd = longEnd;
 }
 public Boolean isWithinReasonableDistance(JourneyCoords other){
  // What you define to be within reasonable distance
  return true;
 }
}

然后,使用JourneyCoords对象的数组或列表,可以在每个对象之间进行成对比较,如下所示:

JourneyCoords[] myJourneyCoords = new JourneyCoords[10];

// Initialization of values
for(int i=0;i<myJourneyCoords.length;i++){
 myJourneyCoords = new JourneyCoords(0.0,0.0,0.0,0.0);
}

// Pairwise comparison
for(int i=0;i<myJourneyCoords.length;i++){
 for(int j=i+1;j<myJourneyCoords.length;j++){
  if(myJourneyCoords[i].isWithinReasonableDistance(myJourneyCoords[j])){
   // These two are within reasonable distance
  }
 }
}

我没有测试代码,但希望您能理解。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM