在Java中存储三个值的数组

时间:2011-02-22 02:27:58

标签: java arrays multidimensional-array

我有一组三个数字,我想在一个数组中存储这个集合的多个副本。 例如,如果我在C中这样做,那将是:

struct tParams
{
    int    v;
    double A;
    double n;
};

static struct tParams Params[] = 
{
    { 4230, 1.477404177730177e-04, 1.9565},
    { 3680, 1.920339268755614e-04, 1.925 },
    { 3450, 2.894751026819746e-04, 1.875 },
    { 3295, 4.349905111115636e-04, 1.825 },
    //...
};

我如何用Java解决这个问题?

由于

修改 为了澄清,这些值将被硬编码并仅被引用。如果我使用ListArray类,看起来我需要在方法中添加每个对象。

我正在使用预先形成数学运算的方法构建一个类。这些方法中的一些使用我难以编码的数据来获得系数。在C中,结构体在主mathOperations类中定义,但不在方法中定义。

4 个答案:

答案 0 :(得分:3)

取决于你想要做什么。

通常,您可能希望在Java中使用一个类,其中您将使用c中的结构。这样的事情是最标准的做法:

public class Params {

    private Integer v;
    private Double a;
    private Double n;

    public Params(int V, double A, double N){
        this.v=V;
        this.a=A;
        this.n=N;
    }
    public Integer getV() {
        return v;
    }
    public void setV(Integer v) {
        this.v = v;
    }
    public Double getA() {
        return a;
    }
    public void setA(Double a) {
        this.a = a;
    }
    public Double getN() {
        return n;
    }
    public void setN(Double n) {
        this.n = n;
    }

}

对于具有类范围的变量,短变量名通常被认为是Javaland中的不良实践。虽然只需将类变量公之于众,就可以在没有getter和setter的情况下做到这一点,但这通常是(虽然绝不是普遍的),也被认为是不好的做法。对于像这样没有行为的简单类,我可能只是公开一切。

答案 1 :(得分:2)

我认为这是C代码的最直译:

  class tParam {
    int    v;
    double A;
    double n;

    private tParam(int v, double A, double n) {
        this.v = v;
        this.A = A;
        this.n = n;
    }
}

tParam[] params = {
    new tParam(4230, 1.477404177730177e-04, 1.9565),
    new tParam(3680, 1.920339268755614e-04, 1.925),
    new tParam(3450, 2.894751026819746e-04, 1.875),
    new tParam(3295, 4.349905111115636e-04, 1.825)
};

它的优点是不会使用所有那些对你的情况来说多余的设置器,因为它们就像你说的那样“设置一次”。另外,鉴于数据是静态列表,使用List类没有意义 - 数组很好。

答案 2 :(得分:1)

一种选择是使用一个类。如果您将它用于简单的事情,我不认为有必要使用getter和setter。

public class TParams {
    public int v;
    public double A;
    public double n;
}

如果性能很重要,我会考虑使用基元的并行数组。这将更快,因为您将避免与对象创建相关的开销。如果要经常将数值交换进出数组,则尤其如此。 Google recommends considering this technique如果您正在进行Android编程。您可以将整个事物包装成一个类,根据您的需要查看类似的内容:

public class TParamsList {
    double[] a
    double[] n;
    int[] v;

    public TParamsList(int size) {
        a = new double[size];
        n = new double[size];
        v = new int[size];
    }

    public void setValue(int slot, int v, double a, double n) {
        a[slot] = a;
        n[slot] = n;
        v[slot] = a;
    }

    public int getV(int slot) {
        return v[slot];
    }

    public int getA(int slot) {
        return a[slot];
    }

    public int getN(int slot) {
        return n[slot];
    }

}

答案 3 :(得分:1)

您可以拥有一个类:

,而不是您的结构
public class TParams
{

   private int v;
   private double A;
   private double n;

   public TParams(int v, double A, double n)
   {
      this.v = v;
      this.A = A;
      this.n = n;
   }

   // Getters + Setters
}

然后你可以得到你班级的实例列表,如下所示:

ArrayList<TParams> tParamsList = new ArrayList<TParams>();
tParamsList.add(new TParams(4230, 1.477404177730177e-04, 1.9565));
etc.

修改

你应该能够这样做:

TParams tParamsArray[] = { tParams_1, tParams_2, tParams_3 }; //Where tParams_xx are all instances of your TParams class
tParamsList.addAll(Arrays.asList(tParamsArray));