按字母顺序对对象排序

时间:2013-09-17 16:26:36

标签: java sorting

对于我的作业,我必须创建一个排序整数的方法和存储在对象类中的字符串。请记住,我必须使用案例。我想使用泛型,但我的老师使用1.4.2(没有泛型)对我进行INSISTS。我可以对时间进行排序,对于字母排序,我使用我的方法对时间进行排序并添加了compareTo。我玩了一下,但是当我输出它时,它按照我输入的顺序给了我输入的所有内容。不是按字母顺序排列。

这是我为存储输入而创建的类:

public class showInfo 
{
    String name;
    String day; 
    int time;    
}

以下是按名称排序的方法!

//method to sort and display info
public static void sortName(){          
    for(int i = 0; i < show.size() - 1; i++) {
        for(int j = 0; j < show.size() - 1; j++){
            if(((showInfo)show.get(i)).name.compareTo(((showInfo)show.get(i+1)).name) > 0){
                showInfo temp = new showInfo();
                temp.name = ((showInfo)show.get(j)).name;
                temp.day = ((showInfo)show.get(j)).day;
                temp.time = ((showInfo)show.get(j)).time;

                ((showInfo)show.get(j)).time = ((showInfo)show.get(i)).time;
                ((showInfo)show.get(j)).day = ((showInfo)show.get(i)).day;
                ((showInfo)show.get(j)).name = ((showInfo)show.get(i)).name;

                ((showInfo)show.get(i)).time = temp.time;
                ((showInfo)show.get(i)).day = temp.day;
                ((showInfo)show.get(i)).name = temp.name;
            }
        } 
    } 

任何帮助都会很棒!提前致谢。 :)

(PS。我知道我需要将“showInfo”更改为“ShowInfo”,但是当我完成时我会这样做。)

5 个答案:

答案 0 :(得分:3)

您的代码存在的一个问题是,您要将show.get(i)show.get(i+1)进行比较,然后将show.get(i)show.get(j)进行交换。你应该与show.get(j)进行比较。此外,内部循环应该转到j < show.size()而不是show.size() - 1。最后,您可以在i + 1而不是0开始内循环。

一旦确定需要交换,只需交换列表中的引用,而不是交换每个字段,就可以做得更好:

showInfo tmp = (showInfo)show.get(i);
show.set(i, show.get(j));
show.set(j, tmp);

答案 1 :(得分:1)

我认为showList,您必须按name排序。

首先,让showInfo实施Comparable

public class showInfo implements Comparable
{
    String name;
    String day; 
    int time;

    public int compareTo(Object o)
    {
        showInfo other = (showInfo) o;
        return name.compareTo(other.name);
    }  
}

然后,在列表中使用`Collections.sort()'

Collections.sort(show);

答案 2 :(得分:0)

您在此处错误地使用i

if(((showInfo)show.get(i)).name.compareTo(((showInfo)show.get(i+1)).name) > 0){

我相信第二个i应该j才能实现冒泡排序

if(((showInfo)show.get(i)).name.compareTo(((showInfo)show.get(j+1)).name) > 0){ 

答案 3 :(得分:0)

你可以这样做......

import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;

class myComparator implements Comparator {

    public int compare(Object o1, Object o2) {
        return ((o1.toString().charAt(0) > o2.toString().charAt(0)) ? 1 : (o1
                .toString().charAt(0) == o2.toString().charAt(0)) ? 0 : -1);
    }
}

public class Sample {

    /**
     * @param args
     */
    public static void main(String[] args) {
        List l = new ArrayList();
        l.add("hello");
        l.add("abc");
        l.add("World");
        l.add("hi");

        System.out.println("Before sorting");
        for (Object i : l) {
            System.out.println(i.toString());
        }

        Collections.sort(l, new myComparator());

        System.out.println("After sorting");
        for (Object i : l) {
            System.out.println(i.toString());
        }

    }

}

答案 4 :(得分:0)

不确定这是否是您所寻找的,它使用投射代替 generics ,无论如何,我希望这会有所帮助

pastebin