2013-07-06 16 views
6

Stavo lavorando con un esempio in cui utilizza ArrayList contiene nuove istanze e utilizza il metodo Collections.sort() utilizzando l'interfaccia comparabile. Non so perché stampa l'hashcode quando ordina e dove si trova il bug nel mio codice. Qualcuno può per favore scoprire l'errore e spiegarmi in dettaglio.Quando si utilizza Collections.sort(), ordina e stampa il codice hash

SortFruitObject.java

import java.util.*; 
public class SortFruitObject{ 
    public static void main(String[] args){ 
     ArrayList<Fruit> frui = new ArrayList<Fruit>(); 

     frui.add(new Fruit("Pine", "PineDesc", 500)); 
     frui.add(new Fruit("Apple", "AppleDesc", 400)); 
     frui.add(new Fruit("Banana", "BananaDesc", 450)); 
     frui.add(new Fruit("JackFruit", "JackFruitDesc", 300)); 

     Collections.sort(frui); 
     System.out.println(frui); 
    } 
} 

Fruit.java

import java.io.*; 
import java.util.*; 
public class Fruit implements Comparable<Fruit>{ 
    private String fruitName; 
    private String fruitDesc; 
    private int fruitQuantity; 

    public int compareTo(Fruit f){ 
     return fruitName.compareTo(f.getFruitName()); 
    } 

    public Fruit(String fruitName, String fruitDesc, int fruitQuantity){ 
     this.fruitName = fruitName; 
     this.fruitDesc = fruitDesc; 
     this.fruitQuantity = fruitQuantity; 
    } 
    public void setFruitName(String fruitName){ 
     this.fruitName = fruitName; 
    } 
    public void setFruitDesc(String fruitDesc){ 
     this.fruitDesc = fruitDesc; 
    } 
    public void setFruitQuantity(int fruitQuantity){ 
     this.fruitQuantity = fruitQuantity; 
    } 
    public String getFruitName(){ 
     return fruitName; 
    } 
    public String getFruitDesc(){ 
     return fruitDesc; 
    } 
    public int getFruitQuantity(){ 
     return fruitQuantity; 
    } 
} 

uscita:

[[email protected], [email protected], [email protected], [email protected]] 
+1

è necessario sostituire 'metodo toString'. –

+1

Super Rohit. Funziona. –

+0

Prego :) –

risposta

10

È necessario t o sovrascrivere toString() metodo per stampare abbastanza in uscita, per impostazione predefinita ritiene toString di Object() che viene realizzato come

public String toString() { 
     return getClass().getName() + "@" + Integer.toHexString(hashCode()); 
    } 

e così l'uscita

+0

+1 Giusto. Ma il tuo codice non ha funzionato. Ecco cosa ho usato ora. 'public String toString() { \t \t return fruitName +" "+ fruitDesc +" "+ fruitQuantity +" \ n "; \t} ' –

+5

@JavaBeginer. Ha dato come appare l'impostazione predefinita 'toString', non come dovresti. Questo è ciò che devi scavalcare, cosa che hai fatto ora. –

Problemi correlati