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/