SparseVector extends Vector { public void removeZeroValues() { if (this.values.length != 0) { List<Integer> idxs = new ArrayList<>(); for (int i = 0; i < values.length; i++) { if (0 != values[i]) { idxs.add(i); } } int[] newIndices = new int[idxs.size()]; double[] newValues = new double[newIndices.length]; for (int i = 0; i < newIndices.length; i++) { newIndices[i] = indices[idxs.get(i)]; newValues[i] = values[idxs.get(i)]; } this.indices = newIndices; this.values = newValues; } } SparseVector();  SparseVector(int n);  SparseVector(int n, int[] indices, double[] values);  SparseVector(int n, Map<Integer, Double> kv); @Override SparseVector clone(); @Override SparseVector prefix(double d); @Override SparseVector append(double d); int[] getIndices(); double[] getValues(); @Override int size(); @Override double get(int i); void setSize(int n); int numberOfValues(); @Override void set(int i, double val); @Override void add(int i, double val); @Override String toString(); @Override double normL2(); @Override double normL1(); @Override double normInf(); @Override double normL2Square(); @Override SparseVector slice(int[] indices); @Override Vector plus(Vector vec); @Override Vector minus(Vector vec); @Override SparseVector scale(double d); @Override void scaleEqual(double d); void removeZeroValues(); @Override double dot(Vector other); @Override DenseMatrix outer(); DenseMatrix outer(SparseVector other); DenseVector toDenseVector(); @Override void standardizeEqual(double mean, double stdvar); @Override void normalizeEqual(double p); @Override boolean equals(Object o); @Override int hashCode(); void forEach(BiConsumer<Integer, Double> action); @Override VectorIterator iterator();  }
@Test public void testRemoveZeroValues() throws Exception { int[] indices = new int[]{1, 3, 5}; double[] values = new double[]{0.0, 3.0, 0.0}; SparseVector v = new SparseVector(6, indices, values); v.removeZeroValues(); Assert.assertArrayEquals(v.getIndices(), new int[]{3}); Assert.assertArrayEquals(v.getValues(), new double[]{3}, TOL); }