Java 对象数组的插入排序?

Java 对象数组的插入排序?,java,arrays,sorting,Java,Arrays,Sorting,例如,我有以下课程: public class FooService { private String name; private int quantity; public FooService(String name, int quantity) { this.name = name; this.quantity = quantity; } // getters + setters } 及 我想根据每个元素的name

例如,我有以下课程:

public class FooService {

    private String name;
    private int quantity;

    public FooService(String name, int quantity) {
        this.name = name;
        this.quantity = quantity;
    }
    // getters + setters
}

我想根据每个元素的name参数按字母顺序对服务数组进行排序。

我知道在这种情况下我可以使用比较器,但是当导入大量数据时,它非常昂贵。有人能帮我做一下插入排序吗


编辑:不允许我使用集合。另外,不要介意数组的固定大小。我最初分配5000个插槽,然后如果在我的程序中达到第5000个插槽,则乘以2。

Make
FooService
implement
compariable
。按字母顺序将
compareTo
方法进行比较。 然后使用
Arrays.sort(服务)它将对数组进行排序


在此处阅读更多信息:

使
FooService
实现
可比性
。按字母顺序将
compareTo
方法进行比较。 然后使用
Arrays.sort(服务)它将对数组进行排序


请在此处阅读更多信息:

如果您定期向数组中添加大量新项,那么@Jakkra描述的
Arrays.sort()
方法是一种可靠的方法

如果您每次只添加几项,则该方法有点重,您可能需要考虑<代码>树目录(也需要执行<代码>可比的< /代码>)。


编辑:刚刚看到你的更新说你不能使用集合(!),所以第二个选项对你没有好处,但我将把它留给子孙后代。

如果你定期向数组中添加大量新项,那么@Jakkra描述的
Arrays.sort()
方法是一个不错的方法

如果您每次只添加几项,则该方法有点重,您可能需要考虑<代码>树目录(也需要执行<代码>可比的< /代码>)。


编辑:刚刚看到你的更新说你不能使用集合(!),所以第二个选项对你没有好处,但我将把它留给后代。

如果你真的喜欢插入排序,试试这个

public void sort(){
    for(int i=2;i<services.length;i++){
        int j=i-1;
        FooService key=services[i];
        while((j>-1)&& ((services[j].getName().compareTo(key.getName()))>0)){
            services[j+1]=services[j];
            j--;
        }
        services[j+1]=key;
    }
}
public void sort(){
对于(inti=2;i-1)和((服务[j].getName().compareTo(key.getName())>0)){
服务[j+1]=服务[j];
j--;
}
服务[j+1]=密钥;
}
}

p.S.您没有使用收藏
compareTo()
只是帮助您进行字符串比较,实现您自己的字符串比较将是重新发明轮子。

如果您真的喜欢插入排序,请尝试此

public void sort(){
    for(int i=2;i<services.length;i++){
        int j=i-1;
        FooService key=services[i];
        while((j>-1)&& ((services[j].getName().compareTo(key.getName()))>0)){
            services[j+1]=services[j];
            j--;
        }
        services[j+1]=key;
    }
}
public void sort(){
对于(inti=2;i-1)和((服务[j].getName().compareTo(key.getName())>0)){
服务[j+1]=服务[j];
j--;
}
服务[j+1]=密钥;
}
}

p.S.您没有使用收藏
compareTo()
只是帮助您进行字符串比较,实现您自己的字符串比较将是重新发明轮子。

btw,为什么在第一个for循环中将i指定为2?顺便说一句,为什么在第一个for循环中将i指定为2?提前谢谢