java - ArrayList<class> 交换方法

标签 java collections arraylist compare swap

  public void sortDatabase(){
        for(int j=0;j<productDatabase.size()-1;j++){
        for(int i =0;i<productDatabase.size()-j-1;i++){
    if(compareTo(i)){
        Collections.swap(productDatabase,i,i++ );  //Με την Χρήση της Collections βιβλιοθήκης κάνω SWAP! Πρέπει να βάλω την βιβλιοθήκη όμως!

    }


    }
    }
}

public boolean compareTo(int index){

    if(productDatabase.get(index).getPrice() > productDatabase.get(index++).getPrice()){
        return true;
    }
    else
        return false;



}

上次我以非常糟糕的方式发布了我的答案。抱歉我的英语真的很糟糕,但这是我的问题。我已经声明了一个 ArrayList < class of Product > ProductDatabase 。产品类别中有一些字段。主要问题是我无法对我的productDatabase 元素进行排序。

我使用 Collections.swap() 但即使我的 ArrayList 由另一个对象的元素组成,我也可以使用该方法吗?

我还希望您看一下我编写的compareTo 方法,该方法是 boolean 值,并返回一个值以了解是否需要交换元素。

预先感谢...并对我最近的第一篇糟糕的帖子感到抱歉。

最佳答案

无需通过使用 swap() 实现排序算法来重新发明轮子。 。 Collections已经提供了sort()方法使用合并排序的良好实现。

实现 Comparator<Product> 并使用 Collections.sort(List<T>, Comparator<T>) List 进行排序根据自定义比较标准。

Comparator<Product> PRICE_COMPARATOR = new Comparator<Product>() { 
    @Override
    public int compare(Product o1, Product o2) {
        // Check for nulls if necessary
        return o1.getPrice().compareTo(o2.getPrice());
    }
}

List<Product> sortedList = Collections.sort(unsortedList, PRICE_COMPARATOR);

如果您的List不是List<Product> ,但是 List<Object>相反(它可能包含不是 Product 的项目),您可以实现 Comparator<Object> 。并使用instanceof在里面留下非 Product List 末尾的项目。

或者迭代过滤它,同时仅添加 Products到有序数据结构,例如 TreeSet<Product> ,提供您自己的Comparator<Product> .

关于java - ArrayList<class> 交换方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19765243/

相关文章:

java - 如何编写 Controller 类以允许内容类型 : application/json and application/x-www-form-urlencoded

javascript - Backbone.js:我正在使用 Web 服务调用来使用 Backbone.js 获取集合对象,如何在 html 中显示集合响应对象数据?

asp.net-mvc - MVC Action Filters Collection 被修改;枚举操作可能不会执行

java - Java中二维数组类型的ArrayList

java - 从 ArrayList 写入文件

java - Android 从自定义网络流播放视频数据?

java - 动态添加行后jtable中的垃圾值

java - 使用MSSQL数据库类型别名,jooq 3.7.3将它们转换为正确的Java类型,但3.12.3将它们全部转换为java类型Object

java - 我应该如何以节省内存的方式将字符串键映射到 Java 中的值?

java - Arraylist 不断覆盖我添加的最后一个条目