2013-07-06 13 views
6

Pracowałem z jednym przykładem, w którym używa ArrayList zawiera nowe wystąpienia i przy użyciu metody Collections.sort() przy użyciu porównywalnego interfejsu. Nie wiem, dlaczego wypisuje hashcode podczas sortowania i gdzie błąd w moim kodzie. Czy ktoś może znaleźć błąd i wyjaśnić mi szczegółowo.Podczas korzystania z Collections.sort(), sortuje i wypisuje kod skrótu

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

wyjściowa:

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

Musisz przesłonić metodę 'toString'. –

+1

Super Rohit. To działa. –

+0

Nie ma za co :) –

Odpowiedz

10

Trzeba t O przesłonić toString() sposób wydrukować wyjście ładna, domyślnie uzna toString() obiektu, który jest realizowany jak

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

a więc wyjście

+0

+1 To prawda. Ale twój kod nie działał. Oto, czego użyłem teraz. 'public String toString() { \t \t return fruitName +" "+ fruitDesc +" "+ fruitQuantity +" \ n "; \t} ' –

+5

@JavaBeginer. Podał, jak wygląda domyślne 'toString', a nie jak powinieneś. To właśnie musisz zastąpić, co teraz zrobiłeś. –

Powiązane problemy