public MatrixEntry next() {
      Entry<Integer, Double> ele = null;
      if (rowIter.hasNext()) {
        ele = rowIter.next();
        entry.eleInCol = ele;
      } else if (colIter.hasNext()) {
        Entry<Integer, Map<Integer, Double>> nextCol = colIter.next();
        entry.col = nextCol;

        rowIter = nextCol.getValue().entrySet().iterator();
        ele = rowIter.next();
        entry.eleInCol = ele;
      }
      return entry;
    }
 public boolean hasNext() {
   if (rowIter != null && rowIter.hasNext()) return true;
   else {
     while (colIter.hasNext()) {
       Entry<Integer, Map<Integer, Double>> nextCol = colIter.next();
       rowIter = nextCol.getValue().entrySet().iterator();
       if (rowIter.hasNext()) {
         entry.col = nextCol;
         return true;
       }
     }
   }
   return false;
 }