You can declare the generic on the type declaration, but not when you actually allocate the object. Not sure the exact reason, perhaps to re-enforce the concept that some generics information is not preserved at compile time.
Set rows[] = new HashSet[3];
for (int i = 0; i < rows.length; i++) {
rows[i] = new HashSet();
}