数据规模和约定
n<=100000
import java.util.*; public class Main { static Comparator<String> com=new Comparator<String>() { @Override public int compare(String o1, String o2) { String s1=o1.substring(6, 14); String s2=o2.substring(6, 14); if(!s1.equals(s2)) return s2.compareTo(s1); else return o2.compareTo(o1); } }; public static void main(String[] args) { Scanner in= new Scanner(System.in); int n = in.nextInt(); List<String> st=new ArrayList<String>(); for (int i = 0; i < n; i++) { String s=in.next(); st.add(s); } Collections.sort(st, com); for (int i = 0; i <st.size(); i++) { System.out.println(st.get(i)); } } } 这个题使用集合很方便,我开始做的时候用的=来比较字符串可以按照生日排序,但是身份证不可以,所以切记,Java里面除了数值类型的以外可以用运算符,类类型的不可以用运算符,即使对了也是有概率的,用类本身的方法