Ya, y también tendrás el mismo problema con los acentos.
 
Utilizando una complementación de Collator (clase añadida con Java 5 y una de las grandes olvidadas de Java), puede realizar comparaciones de lenguaje natural fácilmente. Solo debes cambiar dos lineas.  
1- Crear un collator utilizando el locale que nos interese, en este caso el español: 
Collator collator = Collator.getInstance(new Locale("es", "ES"));  
2- Luego cuando haces la comparacion de letras, puedes usar el collator para comparar. Collator trabaja con Strings, por lo que podemos hacer una conversion: 
int comp = collator.compare(String.valueOf(charO1), String.valueOf(charO2)); 
Esto aplicaría tanto para el código que te puse como para el de HackmanC 
Por ejemplo, partiendo de mi código inicial:    
Código Java:
Ver original- public class Prueba { 
-   
-     public static void-  main (String[]-  args ) {
 
-         // TODO Auto-generated method stub 
-         List<String> lista = new ArrayList<>(); 
-   
-         //solo letras minusculas 
-         lista.add("12a"); 
-         lista.add("acd"); 
-         lista.add("and"); 
-         lista.add("aod");         
-         lista.add("a%c");         
-         lista.add("a0d"); 
-         lista.add("aád"); 
-         lista.add("bdc"); 
-         lista.add("añd"); 
-         lista.add("bc"); //las contrasenas no tienen que ser del mismo tamano 
-   
-   
-     } 
- } 
-   
- class Ordenar implements Comparator<String> { 
-   
-     @Override 
-         if (o1 == null && o2 == null) { 
-             return 0; 
-         } else if (o2 == null) { 
-             return -1; 
-         } else if (o1 == null) { 
-             return 1; 
-         } 
-   
-         //Select shortest to pivot on 
-         int shortest = (o1.length() <= o2.length()) ? o1.length() : o2.length(); 
-   
-         for (int i = 0; i < shortest; i++) { 
-             char charO1 = o1.charAt(i); 
-             char charO2 = o2.charAt(i); 
-   
-                     return -1; 
-                 } else { 
-                     int-  comp  =-  collator. compare(String- . valueOf(- charO1 )- ,  String- . valueOf(- charO2 ));
 
-                     if (comp != 0) { 
-                         return comp; 
-                     } 
-                 } 
-                     return 1; 
-                     int comp = collator.compare(charO1, charO2); 
-                     if (comp != 0) { 
-                         return comp; 
-                     } 
-                 } else { 
-                     return -1; 
-                 } 
-             } else { 
-                     return 1; 
-                 } else { 
-                     int comp = collator.compare(charO1, charO2); 
-                     if (comp != 0) { 
-                         return comp; 
-                     } 
-                 } 
-             } 
-         } 
-   
-         return (o1.length() <= o2.length()) ? -1 : 1; 
-     } 
- } 
Resultado: [aád, acd, and, añd, aod, a0d, a%c, bc, bdc, 12a] 
Un saludo