按字母顺序矢量排序

时间:2014-04-30 01:31:43

标签: java sorting vector

我正在帮助一个项目的朋友,我们似乎无法找到这种排序方法不起作用的原因。我怀疑问题是什么,但我不知道如何解决或替换它。

该计划跟踪捐赠数据,我们正在尝试实施一项功能,将捐赠者的名字按字母顺序排列无效。

我们通过向量和字母顺序排序的方法:

//from other classes:    
Vector <Donor> infoVector  = new Vector <Donor>();
String FName;

Donor tempDonor = new Donor ();

int drawer = 0; 

for (int x = 0; x<infoVector.size(); x++)    
{
    for (int y = x+1; y<infoVector.size(); y++)
    {
        drawer = y;
    }
    if(infoVector.elementAt(x).getFName().compareTo(infoVector.elementAt(drawer).getFName()) < 0)
    {
        tempDonor  = infoVector.elementAt(x);
        infoVector.setElementAt(infoVector.elementAt(drawer), x);
        infoVector.setElementAt(tempDonor, drawer);
    }
}

当我们输出捐赠者名字时,它不会对捐赠者名称进行排序;我认为这与使用&#34; compareTo&#34;比较名称有关。但我没有更好的选择。

2 个答案:

答案 0 :(得分:0)

有一些库方法可以为您排序。请查看Collections.sort(List)Collections.sort(List, Comparator)

我相信你的代码不起作用的原因是因为内部for循环的大括号。现在所有的内部循环都会将infoVector.size() - 1分配给drawer,因为根据你的大括号,你在此期间不会对drawer做任何事情。我怀疑你想要做的是将if块放在内部循环中。

更挑剔的事情:drawer并非绝对必要;在原始代码中,您只需替换infoVector.size() - 1(或包含该值的变量)。此外,排序方法不是您可以使用的最有效的排序方法,但如果infoVector足够短并且此方法调用过于频繁,则无关紧要。

答案 1 :(得分:0)

此代码

for (int y = x+1; y<infoVector.size(); y++)
{
    drawer = y;
}

将完全遍历向量,因此y始终为infoVector.size() - 1

即使您将tempDonor放在最后,下一次迭代,您也会将其移回。

不要试图发明轮子,而是使用Collections.sort。

参见What function can be used to sort a Vector?http://docs.oracle.com/javase/7/docs/api/java/util/Collections.html#sort(java.util.List)