java - 当对象放入 ArrayList 时对其进行排序

标签 java sorting object arraylist methods

我目前正在开发一个类,其中包含一个“add”方法,该方法将我的特定对象添加到我的 ArrayList 中,这是在我的构造函数中实例化的字段。目的显然是将对象添加到ArrayList中,但同时将对象添加到ArrayList不断排序的位置。这些对象通过从其类中名为 getCompany() 的访问器方法接收的字符串进行比较。我无法理解我将如何去做这件事。我的实验代码如下:

public class WeeklyOrders {
    private List<DistributionOrder> orders;
    public WeeklyOrders(){
        orders= new ArrayList<DistributionOrder>();
    }
    public void add(DistributionOrder dOrder){
        int maxPos=0;
        int minDiff=0;
        for(int i=0;i<orders.size();i++){
            String comp=orders.get(i).getCompany();
            int diff=comp.compareTo(dOrder.getCompany());
            if(diff<minDiff){
                minDiff=diff;
                maxPos=i;
            }
        }
        orders.add(maxPos,dOrder);
    }
    public String toString(){
        String s="";
        for(int i=0;i<orders.size();i++){
            s=s+orders.get(i).getCompany()+"\t";
        }
        return s;
    }
}

最佳答案

您错误地使用了 compareTo 方法。您不应该将它的返回值相互比较:compareTo 结果的唯一合理用法是将其与零进行比较。如果该元素小于传递的元素,则返回任何负数;如果该元素大于传递的元素,则返回任何正数。也许您想要这样的东西:

int maxPos=-1;
for(int i=0;i<orders.size();i++){
    String comp=orders.get(i).getCompany();
    int diff=comp.compareTo(dOrder.getCompany());
    if(diff<0){
        maxPos=i;
    } else break; // no need to continue iterating list after that
}
orders.add(maxPos+1,dOrder);

请注意,您应该仔细考虑极端情况:如果 dOrder 成为 orders 的第一个和最后一个元素,将会发生什么。

最后请注意,考虑到列表始终是排序的,您可以考虑使用 Collections.binarySearch()使用自定义比较器的方法:

int maxPos = Collections.binarySearch(orders, dOrder,
                 Comparator.comparing(DistributionOrder::getCompany));
if(maxPos < 0) maxPos = - maxPos - 1;
orderds.add(maxPos, dOrder);

这样会更快。

关于java - 当对象放入 ArrayList 时对其进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42262631/

相关文章:

python - np.array 中的广播函数调用

java - Android:按钮虽然创建但为空

java - Bigcommerce API Java 创建发货错误 400

java - 无法使用模式匹配器获得正确的输出

mysql - 连接多列并在行内排序

java - 如何将排序后的整数传递给 JOptionPane?

javascript - 对象(字符串或数组)名称。如何得到它?

javascript - 1.constructor 和 (1).constructor 的区别

java - 如何将图像从 Java 应用程序发送到 Android 应用程序?

Javascript 按顺序排序数组