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
implementcompariable
。按字母顺序将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?提前谢谢