Как отсортировать ArrayList строк в алфавитном порядке, используя метод CompareTo? - PullRequest
0 голосов
/ 03 октября 2019

Я программист-любитель, и я создал программу, в которой содержится массив списков контактов с телефонной книгой, и я пытаюсь отсортировать массив лексикографически, используя метод CompareTo. Я не знаю, как правильно вызвать метод в методе main, чтобы он сортировался правильно, и мне не разрешено использовать сортировку коллекций. Кто-нибудь может мне помочь?

Вот мой код:

public class Phonebook implements Comparable<Phonebook> {
        private String first, last;
        public Contact(String first, String last) {
        this.first = first;
        this.last= last;
}
        public String getFirst() {return first;}
        public String getLast() {return last;}

        public String toString() {
            return first + " " + last;
    }
        public int compareTo(Phonebook another) {
        int a = last.compareTo(another.last);
        int b = first.compareTo(another.first);
        if (a== 0 && b== 0)
            return 0;
        if (a == 0 && b!= 0)
            return b;
        return a;
    }
    }
public class PhonebookList implements Iterable<Phonebook>{

    ArrayList<Phonebook>phonebook;

    public PhonebookList() {
    }
    public PhonebookList(Contact[]contacts) {
        phonebook=new ArrayList<>(Arrays.asList(phonebooks));
    }

import java.util.*;
public static void main(String[] args) {
        // TODO Auto-generated method stub

        PhonebookList list= new PhonebookList();

        Phonebook ph1= new Phonebook ("Brandon","Johnson");
        Phonebook ph2 = new Phonebook ("Samantha","Joseph");

        list.add(ph1);
        list.add(ph2);
}

1 Ответ

0 голосов
/ 03 октября 2019

Сравнение с методом возвращает 1, если элемент «больше», 0, если они равны, или -1, если элемент «меньше».

Это должно работать:

int compareTo (PhoneBook o) {
    for(int i = 0; i < first.size(); i++) {
        if (i >= o.first.size())
            return 1;

        if ((int)first.charAt(i) > (int)o.first.charAt(i))
            return -1;

        else if ((int)first.charAt(i) < (int)o.first.charAt(i))
            return 1;
    }

    for(int i = 0; i < last.size(); i++) {
        if (i >= o.last.size())
            return 1;

        if ((int)last.charAt(i) > (int)o.last.charAt(i))
            return -1;

        else if ((int)last.charAt(i) < (int)o.last.charAt(i))
            return 1;
    }

    return 0;
}

Это просто проверяет, больше ли значение ASCII. (Все буквы должны быть строчными или прописными)

...