Этот компаратор должен решить вашу проблему.
public class Test {
public static void main(String... args) {
String[] list = {"X_1(1).PNG", "X_1(2).PNG", "X_1(3).PNG", "X_10(1).PNG", "X_10(2).PNG", "X_10(3).PNG", "X_100(1).PNG", "X_100(2).PNG", "X_100(3).PNG"};
SortedSet<String> fileNames = new TreeSet<>(Test::compare);
fileNames.addAll(Arrays.asList(list));
fileNames.forEach(System.out::println);
}
private static int compare(String first, String second) {
int firstNumber = Integer.parseInt(first.substring(first.indexOf('_') + 1, first.indexOf('(')));
int secondNumber = Integer.parseInt(second.substring(first.indexOf('_') + 1, second.indexOf('(')));
int difference = firstNumber - secondNumber;
if (difference != 0) {
return difference;
}
firstNumber = Integer.parseInt(first.substring(first.indexOf('(') + 1, first.indexOf(')')));
secondNumber = Integer.parseInt(second.substring(first.indexOf('(') + 1, second.indexOf(')')));
return firstNumber - secondNumber;
}
}