Class<?>[] list1 = new Class[] { String.class, String.class, Integer.class };
Class<?>[] list2 = new Class[] { Integer.class, String.class, String.class };
Comparator<Class<?>> classComparator = new Comparator<Class<?>>() {
@Override
public int compare(Class<?> o1, Class<?> o2) {
return o1.getCanonicalName().compareTo(o2.getCanonicalName());
}
};
Arrays.sort(list1, classComparator);
Arrays.sort(list2, classComparator);
if (Arrays.equals(list1, list2)) {
System.out.println("same regardless of order");
} else {
System.out.println("NOT same regardless of order");
}
Die oben druckt
same regardless of order
Ich Modifizierung der ursprünglichen Listen zu verwenden sein. Vielleicht möchten Sie zuerst Kopien machen, wenn dies nicht gewünscht ist.
Arrays.equals()
verwendet Class.equals()
, was wiederum nur Object.equals()
ist. Solange es nur ein Klassenobjekt für jede Klasse gibt, funktioniert dies. Ich glaube, dass dies gilt, solange Sie nur einen Klassenlader verwenden. Seien Sie also gewarnt, dass es hier ein bisschen subtil ist.
Implementiert die Klasse '.getHashCode()' und '.equals()'? (Oder meinst du wörtlich die 'Class' Klasse?) – Ryan
Angenommen,' Class' ist 'java.lang.Class', witzigerweise implementiert sie weder' hashCode() 'noch' equals() '. –