Как уже упоминали другие, вы должны просто рассчитать одну сторону треугольника. Вы не должны копировать его или даже выделять для него место. Просто преобразуйте свои координаты x и y в один индекс, и вы можете получить массив, который чуть больше половины размера полного квадратная матрица например:
class SymmetricMatrix {
private final double[];
/**
* @param size the size of one dimension of the matrix. eg: 3 for a 3x3 matrix.
*/
SymmetricMatrix(int size) {
matrix = new double[index(size) + 1];
}
private index(int x, int y) {
if (x > y) {
int tmp = x;
x = y;
y = tmp;
}
// now x <= y
i = (y * y + y) / 2 + x;
}
public double get(int x, int y) {
return matrix[index(x, y)];
}
public void set(int x, int y, double value) {
matrix[index(x, y)] = value;
}
}
В этом примере используются двойные значения, но вы можете легко настроить их (или даже сделать их общими, если хотите использовать объекты).
Для заполнения:
SymmetricMatrix matrix = new SymmetricMatrix(size);
for (int y = 0; y < size; y++) {
for (int x = 0; x <= y; x++) {
matrix.set(x, y, /* value */);
}
}