Лучший способ, который я скажу - это использовать Set
структуру данных
int row = 2;
int col = 2;
Set<Set<Integer>> rowSet = new HashSet<>();
for (int i = 0; rowSet.size() < row; i++) {
Set<Integer> colSet = new HashSet<>();
for (int j = 0; colSet.size() < col; j++) {
double x = (Math.random() * ((15 * (j + 1)) - ((15 * j) + 1)) + 1 + ((15 * j) + 1));
colSet.add((int) x);
}
rowSet.add(colSet);
}
и, наконец, преобразовать их в массив
int[][] arr = set.stream()
.map(i->i.stream()
.mapToInt(Integer::intValue)
.toArray())
.toArray(int[][]::new);