2016-07-17 2 views
0

Рассмотрим следующий массив:Как отсортировать массив, содержащий как символы, так и целые числа?

{5,"k",2,"d",3,"e"} 

Как отсортировать массив такой, что символы и целые числа, каждый сгруппированы вместе и отсортированный:

{"d","e","k",2,3,5} 
+3

Внесите свой собственный «Компаратор» и вызовите 'Arrays.sort (arr, myComparator)'. – Andreas

+0

Вы должны указать код своих попыток, чтобы мы могли помочь вам улучшить их. –

+1

Как вы объявили массив? Массивы обычно не могут содержать mutliple типы данных, если вы не насильно взломали их. «Код», который вы показываете, недействителен Java, и ваш вопрос неясен. Просьба уточнить. –

ответ

1

Вы можете сортировать массив, позвонив по одному из sort() методы на Arrays.

В вашем случае вы должны позвонить по телефону sort(T[] a, Comparator<? super T> c).

Поскольку ваш массив является Object[], это означает, что вам необходимо реализовать Comparator<Object>.

Вот пример реализация, которая будет сортировать выборочные значения, как вы хотите:

public final class MixedComparator implements Comparator<Object> { 
    @Override 
    @SuppressWarnings({ "unchecked", "rawtypes" }) 
    public int compare(Object obj1, Object obj2) { 
     Class<?> class1 = obj1.getClass(); 
     Class<?> class2 = obj2.getClass(); 

     // Sort values of same type according to their natural order 
     if (class1 == class2) 
      return ((Comparable)obj1).compareTo(obj2); 

     // Sort values of different type by class name, 
     // in descending order, so `String` sorts before `Integer` 
     return class2.getName().compareTo(class1.getName()); 
    } 
} 

Вы затем использовать его как это:

Object[] arr = { 5, "k", 2, "d", 3, "e" }; 
Arrays.sort(arr, new MixedComparator()); 

System.out.println(Arrays.toString(arr)); 

Выход:

[d, e, k, 2, 3, 5] 
+0

Спасибо, я получаю правильный выход. Раньше я также реализовал Компаратор, но не сравнивал имена классов. – shirish

Смежные вопросы