Хранение массива из трех значений в Java - PullRequest
5 голосов
/ 22 февраля 2011

У меня есть набор из трех чисел, и я хочу сохранить несколько копий этого набора в массиве.например, если бы я делал это в 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 для классов, похоже, мне нужно добавить каждый объект из метода.

Я строю класс с методами, которые выполняют математические операции.Некоторые из этих методов используют данные, которые я жестко кодирую, чтобы получить коэффициенты.В Си структуры определены в основном классе mathOperations, но не в методе.

Ответы [ 4 ]

3 голосов
/ 22 февраля 2011

Зависит от того, что вы пытаетесь сделать.

В общем, вы, вероятно, хотите использовать класс в 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 для переменных с областью видимости. Хотя можно было бы сделать это без методов получения и установки, просто обнародовав переменные класса, это, как правило (хотя и вовсе не универсально), также считается плохой практикой. Для такого простого класса без поведения я бы, наверное, просто обнародовал все.

2 голосов
/ 22 февраля 2011

Я думаю, что это самый буквальный перевод вашего кода 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 - с массивом все в порядке.

1 голос
/ 22 февраля 2011

Вместо вашей структуры у вас может быть класс:

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));
1 голос
/ 22 февраля 2011

Один из вариантов - использование класса. Я не думаю, что наличие геттеров и сеттеров необходимо, если вы используете это для чего-то простого.

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

Если важна производительность, я бы подумал об использовании параллельных массивов примитивов. Это будет быстрее, потому что вы избежите накладных расходов, связанных с созданием объекта. Это особенно верно, если вы часто меняете значения в массивах и из них. Google рекомендует рассмотреть эту технику , если вы занимаетесь программированием на 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];
    }

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...