public void updateColumnInfos() {
        if (this.getData() == null || this.getData().size() == 0) return;
        int colCnt = this.getData().get(0).length;

        initColInfoIfNull(colCnt);

        for (ColumnInfo ci : getColumnsInfos()){
            ci.setMaxValue(Double.MIN_VALUE);
            ci.setMinValue(Double.MAX_VALUE);
        }

        for (int rowIdx = 0; rowIdx < this.getData().size(); rowIdx++) {
            double[] row = this.getData().get(rowIdx);
            for (int colIdx = 0; colIdx < row.length; colIdx++) {
                ColumnInfo ci = this.getColumnsInfos().get(colIdx);
                if (row[colIdx] < ci.getMinValue()) {
                    ci.setMinValue(row[colIdx]);
                }
                if (row[colIdx] > ci.getMaxValue()) {
                    ci.setMaxValue(row[colIdx]);
                }
            }
        }
    }