Я много читал об этом в этом форуме и на других форумах, но я до сих пор не могу получить конкретный ответ. Во всяком случае я решил сделать это следующим образом:Java, Сортировка Массив парных разрядов и его индексы
Вот класс держать строку и целое:
public class Tuple{
private String token;
private int docID;
public Tuple(String token, int docID) {
this.token = token;
this.docID = docID;
}
public String getToken() {
return token;
}
public void setToken(String token) {
this.token = token;
}
public int getDocID() {
return docID;
}
public void setDocID(int docID) {
this.docID = docID;
}
}
И потом, я создать массив-список, чтобы поместить эти кортежи private ArrayList<Tuple> temps = new ArrayList<>();
Тогда я заселить ArrayList так:
for (int i = 0; i < numberOfDocs; i++)
{
Tuple cat = new Tuple(Double.toString(vect[i]),i);
temps.add(cat);
}
в конце концов, я сортировки массива, как это:
public void sortTmp()
{
Collections.sort(temps, new Comparator<Tuple>()
{
@Override
public int compare(Tuple tr2, Tuple tr1)
{
return tr2.getToken().compareTo(tr1.getToken());
}
});
}
Существует некоторая проблема с java и doubleles, и я не могу использовать непосредственно свою двойную матрицу, поэтому мне нужно сделать Double.toString()
. Результаты сортируются, но не совсем корректны, потому что строковое вычисление из double не очень точное с точки зрения сортировки по двойному номеру.
Любые идеи?
Сортировка лексически, вероятно, не то, что вы хотите. Почему вы не можете использовать парный разряд? Или лучше: что заставляет вас думать, что не можете? «Есть некоторые проблемы с java и doubles» - в основном это разработчики, у которых проблемы с удвоениями, а не с java. – Fildor
@Fildor этой конкретной строки 'return tr2.getToken(). CompareTo (tr1.getToken());' неверно, когда я изменяю все, начиная с типа 'string' и заканчивая' double'. Согласно моей IDE: 'double не может быть разыменован' – Javac
Да, затем измените * эту * строку, чтобы она работала для double. Вы можете использовать Double wrapper, если вам нужно использовать compareTo. – Fildor