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并返回一个值,知道是否需要交换元素。
提前致谢...并为我最近的第一篇不好的帖子感到抱歉。
答案 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>
。