我有一组三个数字,我想在一个数组中存储这个集合的多个副本。 例如,如果我在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类中定义,但不在方法中定义。
答案 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));