Вы можете использовать HashSet напрямую, или вы можете создать класс-оболочку, подобный следующему, чтобы позволить вам создавать экземпляры множеств более кратко:
public class MyCharSet extends Set<Character> {
/**
* @param ranges an N x 2 array representing inclusive character ranges.
*/
public MyCharSet(char[][] ranges) {
super(intuitSize(ranges));
for (char[] range : ranges) {
for (char ch = range[0]; ch <= range[1]; ch++) {
this.add(ch);
}
}
}
private static int intuitSize(char[][]ranges) {
if (ranges.length == 0) {
return 0;
}
int min = Integer.MAX_VALUE;
int max = Integer.MIN_VALUE;
for (char[] range : ranges) {
if (range.length != 2 || range[0] > range[1]) {
throw new IllegalArgumentException("bad range");
}
min = Math.min(ranges[0], min);
max = Math.max(ranges[1], max);
}
return max - min;
}
}