Map<Integer, Character> chars = new HashMap<Integer, Character>(); List<Integer> numbers = new ArrayList<Integer>();
for (int i = 0; i < array.length; i++) { if (array[i] instanceof Character) { chars.put(i, (Character) array[i]); } else { numbers.add((Integer) array[i]); } }
Collections.sort(numbers, new Comparator<Integer>() { public int compare(Integer o1, Integer o2) { return o2 - o1; } });
Stack<Integer> s = new Stack<Integer>(); s.addAll(numbers);
for (int i = 0; i < array.length; i++) { if (chars.containsKey(i)) { System.out.print(chars.get(i)); } else { System.out.print(s.pop()); } if (i != array.length - 1) { System.out.print(","); } } }
完美版:Object[] objs = {1, 56, 'a', 23, 11, 'b', 8, 16, 'c'}; int length = objs.length; for (int i = 0; i < length; i++) { int n = length - i - 1; for (int j = 0; j < n; j++) { if (objs[j] instanceof Number) { int k = j; do { k++; }while((k <= n) && !(objs[k] instanceof Number)); if (k <= n && new BigDecimal(objs[j].toString()).compareTo(new BigDecimal(objs[k].toString())) > 0) { Object o = objs[j]; objs[j] = objs[k]; objs[k] = o; } } } } System.out.println(Arrays.toString(objs));你还可以用这个实现所有数字类型的排序,如: {1.24, 54, "我", 77, 'a', "墨云", 68, -1, 0, 5, 4, '9'} 排序结果: [-1, 0, "我", 1.24, 'a', "墨云", 4, 5, 54, 68, 77, '9']
Object[] array = { 1, 56, 'a', 23, 11, 'b', 8, 16, 'c' };
Map<Integer, Character> chars = new HashMap<Integer, Character>();
List<Integer> numbers = new ArrayList<Integer>();
for (int i = 0; i < array.length; i++) {
if (array[i] instanceof Character) {
chars.put(i, (Character) array[i]);
} else {
numbers.add((Integer) array[i]);
}
}
Collections.sort(numbers, new Comparator<Integer>() {
public int compare(Integer o1, Integer o2) {
return o2 - o1;
}
});
Stack<Integer> s = new Stack<Integer>();
s.addAll(numbers);
for (int i = 0; i < array.length; i++) {
if (chars.containsKey(i)) {
System.out.print(chars.get(i));
} else {
System.out.print(s.pop());
}
if (i != array.length - 1) {
System.out.print(",");
}
}
}
int length = objs.length;
for (int i = 0; i < length; i++) {
int n = length - i - 1;
for (int j = 0; j < n; j++) {
if (objs[j] instanceof Number) {
int k = j;
do {
k++;
}while((k <= n) && !(objs[k] instanceof Number));
if (k <= n && new BigDecimal(objs[j].toString()).compareTo(new BigDecimal(objs[k].toString())) > 0) {
Object o = objs[j];
objs[j] = objs[k];
objs[k] = o;
}
}
}
}
System.out.println(Arrays.toString(objs));你还可以用这个实现所有数字类型的排序,如:
{1.24, 54, "我", 77, 'a', "墨云", 68, -1, 0, 5, 4, '9'}
排序结果:
[-1, 0, "我", 1.24, 'a', "墨云", 4, 5, 54, 68, 77, '9']