ArrayList <class> swap方法</class>

时间:2013-11-04 09:57:13

标签: 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&lt; <产品类> productDatabase。产品类中包含一些字段。主要问题是我无法对productDatabase元素进行排序。

我使用Collections.swap()但是我可以使用该方法,即使我的ArrayList包含另一个对象的元素吗?

另外,我想让你看看我写的compareTo方法,它是boolean并返回一个值,知道是否需要交换元素。

提前致谢...并为我最近的第一篇不好的帖子感到抱歉。

1 个答案:

答案 0 :(得分:0)

通过使用swap()实现排序算法,无需重新发明轮子。 Collections已经使用一个很好的mergesort实现提供了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的项目),您可以实现{{1}并在其中使用Comparator<Object>instanceof的末尾留下非Product项。

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