Вы также можете попытаться взглянуть на реализацию la4j CompressedVector . Он использует пару массивов: массив значений и массив их признаков. И с бинарным поиском поверх этого он просто летает. Таким образом, эта реализация гарантирует O(log n)
время выполнения для get
/ set
операций.
Просто краткий пример
Vector a = new CompressedVector(new double[]{ 1.0, 2.0, 3.0 }).
// calculates L_1 norm of the vector
double n = a.norm();
// calculates the sum of vectors elements
double s = a.fold(Vectors.asSumAccumulator(0.0));