ArrayList swap method

2019-08-08 01:34发布

问题:

  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;



}

Last time i posted my answer in a very bad way. Sorry for my english that really suck , but here is my problem. I 've declared an ArrayList < class of Product > productDatabase . Product class has some fields in it. The main problem is that i cannot sort my productDatabase elements .

I use Collections.swap() but can i use that method even if my ArrayList consists of elements that are another object ?

Also i want you to take a look at my compareTo method that i wrote which is boolean and returns me a value to know if swap of elements is needed.

Thanks in advance ... and feeling sorry for my latest first bad post.

回答1:

There's no need to reinvent the wheel by implementing sorting algorithms using swap(). Collections already provides a sort() method using a nice implementation of mergesort.

Implement a Comparator<Product> and use Collections.sort(List<T>, Comparator<T>) to sort the List according to a custom comparison criteria.

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);

If your List is not a List<Product>, but a List<Object> instead (it might contain items that are not Products), you could implement a Comparator<Object> and use instanceof inside it to leave non Product items at the end of the List.

Or iterate to filter it while adding only Products to an ordered data structure such as a TreeSet<Product>, providing your own Comparator<Product>.