例如,我有以下类:
public class FooService {
private String name;
private int quantity;
public FooService(String name, int quantity) {
this.name = name;
this.quantity = quantity;
}
// getters + setters
}
和
public class FooStorage {
private FooService [] services = new FooService[10];
public void add(FooService fooService) {
}
}
我想根据每个元素的名称参数按字母顺序对服务数组进行排序。
我知道在这种情况下我可以使用比较器,但在导入大量数据时非常昂贵。任何人都可以帮我处理插入排序吗?
编辑:我不允许使用收藏集。另外,不要介意数组的固定大小。我最初分配5000个插槽,然后在我的程序中达到第5000个插槽时乘以2。
答案 0 :(得分:3)
让FooService
实施Comparable
。使compareTo
方法按字母顺序进行比较。
然后使用Arrays.sort(services);
它将对您的数组进行排序。
在此处阅读更多内容:http://docs.oracle.com/javase/6/docs/api/java/util/Arrays.html#sort(java.lang.Object[])
答案 1 :(得分:2)
如果您定期向阵列中添加大量新项目,那么@Jakkra所描述的Arrays.sort()
方法是一种合理的方法。
如果您经常每次只添加一些项目,那么这种方法有点重,您可能需要考虑TreeSet
(还需要实施Comparable
)。< / p>
编辑:刚刚看到你的更新说你不能使用收藏品(!),所以第二个选项对你没有好处,但我会把它留在这里供后人使用。
答案 2 :(得分:0)
如果你真的热衷于插入排序试试这个..
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;
}
}
P.S。您没有使用集合... compareTo()
只是帮助您进行字符串比较,实现您自己的字符串比较将重新发明轮子。