2013-11-04 1 views
1
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; 



} 

지난 번에 내 답변이 매우 나쁜 방식으로 게시되었습니다. 정말 영어로 유감 스럽지만, 제 문제는 여기에 있습니다. Product> productDatabase의 ArrayList < 클래스를 선언했습니다. 제품 클래스에는 필드가 있습니다. 주요 문제는 내 productDatabase 요소를 정렬 할 수 없다는 것입니다.ArrayList <class> 교환 방법

나는 Collections.swap()을 사용하지만, 내 ArrayList가 다른 객체 인 요소로 구성되어 있어도이 메서드를 사용할 수 있습니까?

또한 나는 당신이 내가 쓴 boolean 인 compareTo 메소드를 살펴보고 요소 교체가 필요한지 아는 값을 리턴 해 주었으면한다.

미리 감사드립니다 ... 그리고 내 첫 번째 나쁜 게시물에 대해 미안합니다.

+0

그냥 정렬하려는 경우 productDatabase 객체의 클래스에 Comparable을 구현 한 다음 Collections.sort를 사용하십시오. – Akkusativobjekt

답변

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

, 당신이 Comparator<Object>을 구현하고 말에 비 Product 항목을두고 내부 instanceof를 사용할 수 있습니다 귀하의 ListList<Product> 아니지만, List<Object> 대신 (이 Product의 수없는 항목을 포함 할 수 있습니다) 경우 List.

ProductsTreeSet<Product>과 같은 정렬 된 데이터 구조에 추가하는 동안 반복적으로 필터링하여 자신의 Comparator<Product>을 제공하십시오.