2015-03-27 2 views
0

У меня есть два int [], начало и конец. Они относятся к ряду строк: Start [0] - начальная позиция строки 0, а End [0] - в конечную позицию строки 0. Я хочу сортировать начало в порядке возрастания, а затем сортировать End таким же образом, поэтому массивы остаются выровненными.Сортировка двух int [] по тем же критериям

В MatLab, вы можете сделать это:

[IDX, StartSorted] = сортировки (Start); EndSorted = End (idx);

Каков наилучший способ выполнения одной и той же операции на Java? Напишите класс кортежа, или есть лучший способ?

Как правило, что такое лучший способ манипулировать парными данными?

Thak you.


Спасибо, ребята, это здорово.

+0

It может быть, я, но отсортированная карта звучит как хорошая идея. – Adam

ответ

3

Лучше всего было бы, как вы заявили, чтобы создать Tuple класс какой-то, что поддерживает оба значения. Вы также должны реализовать equals и сделать свой класс реализуемым Comparable<T> и реализовать compareTo. Как только вы это сделаете, вы можете отсортировать коллекцию экземпляров Tuple (используя Collections.sort), и они будут сортироваться в соответствии с заказом, указанным вашим методом compareTo. В этом конкретном случае ваше сравнение будет просто основано на значении start в Tuple.

Если вы не заботитесь столько об определении неявного упорядочения для вашего класса, реализовав Comparable<T>, вы можете указать специальный компаратор с помощью Comparator#comparingInt и использовать его с массивом ваших объектов:

//tuples is an array 
//Tuple::getStart is a method reference to the getStart method 
//in tuple. So you get an ad-hoc comparator that uses this 
//function as the basis for ordering 
Arrays.sort(tuples, Comparator.comparingInt(Tuple::getStart) 
5

Не используйте два массива int. Используйте один массив Line, где Line будет классом, имеющим start и end.

Затем, чтобы отсортировать строки по их запуска (в Java 8):

Arrays.sort(lines, Comparator.comparingInt(Line::getStart)); 
Смежные вопросы