我必须要比较实施吗?

时间:2014-12-17 19:39:15

标签: java methods linked-list abstract compareto

我正在尝试在列表中搜索,但我将其排序为数组,以便将链接列表转换为数组列表,但是当我编译它时,下面没有此部分。命令提示符给出" Person不是抽象的,并且不会覆盖Comparable"中的抽象方法compareTo(Person)。

我该如何解决这个问题?

public int compareTo(Person other){
    if (!this.name.equalsIgnoreCase(other.name))
        return this.name.compareTo(other.name);

        return this.name + " "+other.name;
}

搜索列表和排序方法:

public void searchList(String search)
{
    if(phoneList.size() == 0){
        System.out.println("There is no record phone book.");
    }

    Node<Person> tempNode = phoneList.head;
    SLinkedList<Person> tempList = new SLinkedList();
    for(int i=1; i<=phoneList.size; i++) 
    {
        if (tempNode.getElement().getName().contains(search) || tempNode.getElement().getSurname().contains(search) || tempNode.getElement().getAddress().contains(search) || tempNode.getElement().getCell().contains(search) || tempNode.getElement().getHome().contains(search) || tempNode.getElement().getWork().contains(search))
        {
            tempList.addLast(tempNode.getElement());

            personArray = new Person[tempList.size()];
            Iterator<Person> it = tempList.iterator();

            while(it.hasNext()){
            int x = 0;
            personArray[x] = it.next();
            x++;
            }

            bubbleSort(personArray );
            for(int x = 0; x < tempList.size(); x++) 
            System.out.println((x+1) + ""+ personArray[x]);

        }

        tempNode = tempNode.getNext();
    }
}

public <AnyType extends Comparable<? super AnyType>> void bubbleSort(AnyType[] a) {
    int outer, inner;
    for (outer = a.length - 1; outer > 0; outer--) { // counting down
        for (inner = 0; inner < outer; inner++) { // bubbling up
            if (a[inner].compareTo(a[inner + 1]) > 0) { // if out of order...
                //then swap
                swapReferences(a,inner,inner+1);
            }
        }
    }
}

    public <AnyType> void swapReferences( AnyType [ ] a, int index1, int index2 )
{
    AnyType tmp = a[ index1 ];
    a[ index1 ] = a[ index2 ];
    a[ index2 ] = tmp;
}

人员类:

public class Person implements Comparable<Person>
{
    private String name;
    private String surname;
    public  String address;
    public  String cell;
    public  String home;
    public  String work;


    public Person(String name, String surname, String address, String cell, String home, String work)
    {
        this.name    = name;
        this.surname = surname;
        this.address = address;
        this.cell    = cell;
        this.home    = home;
        this.work    = work;
    }

    // Accessor methods:
    public String getName(){
        return name;
    }
    public String getSurname(){
        return surname;
    }
    public String getAddress(){
        return address;
    }
    public String getCell(){
        return cell;
    }
    public String getHome(){
        return home;
    }
    public String getWork(){
        return work;
    }

    // Modifier methods:
    public  void setName(String name){
        this.name = name;
    }
    public void setSurname(String surname){
        this.surname = surname;
    }
    public void setAddress (String address){
        this.address = address;
    }
    public void setCell (String cell){
        this.cell = cell;
    }
    public void setHome (String home){
        this.home = home;
    }
    public void setWork (String work){
        this.work = work;
    }

    public String toString(){
        return name + " " + surname + " " + address + " " + cell + " " + home + " " + work;
    }

    public int compareTo(Person other){
        if (!this.name.equalsIgnoreCase(other.name))
            return this.name.compareTo(other.name);

        return this.name + " "+other.name;
    }

}

2 个答案:

答案 0 :(得分:1)

您现有的 compareTo 方法存在问题,但删除它会违反implements Comparable合同,因为您必须提供compareTo方法。

public int compareTo(Person other) {
    if (!this.name.equalsIgnoreCase(other.name))
        return this.name.compareTo(other.name);

    // next line returns a String, but the method needs to return an int
    return this.name + " " + other.name;
}

您可以更直接地依赖标准String compareTo:

public int compareTo(Person other) {
    if ( this.name.equalsIgnoreCase( other.name ) ) { return 0 };

    return this.name.compareTo( other.name );
}

如果您没有编码的 ignore case 约束,那么这只是

public int compareTo(Person other) {
    return this.name.compareTo( other.name );
}

顺便说一句,没有理由让地址,单元格,家庭和工作公开 - 而这通常是不好的做法。

答案 1 :(得分:0)

为了实现接口,您需要实现该接口中的所有方法。您可以删除implements Comparable部分或向您的班级添加public int compareTo方法。

compareTo方法的规则是:
- 如果此人大于其他人,则返回1
- 如果此人小于其他人,则返回-1
- 如果它们相等,则返回0