Visualizzazione dei risultati da 1 a 3 su 3
  1. #1
    Utente di HTML.it L'avatar di el92
    Registrato dal
    Dec 2014
    Messaggi
    177

    [java]ordinare oggetti da un ArrayList

    ciao devo scrivere un programma che ordina ogni tipo di oggetto.Ho provato a risolverlo così:

    codice:
    import java.util.*;
    
    class SortHarness{
        
    public static void main(String args[]){
        ArrayList a=new ArrayList();
        
        a.add("ciao");
        a.add(2);
        Collections.sort(a);
        
        for(Object gr:a){
            System.out.println(gr);
        }
        
    }
    }
    Il punto è che il compilatore non mi accetta l'int,dovrei fare un cast..ma perchè l'arraylist accetta solo String?E se metto l'arraylist come l'arraylist<Object>,non mi compila un tubo come posso fare per far si che l'arraylist accetti diversi tipi di oggetti?
    Ultima modifica di el92; 21-04-2015 a 11:58

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da el92 Visualizza il messaggio
    Il punto è che il compilatore non mi accetta l'int,dovrei fare un cast..ma perchè l'arraylist accetta solo String?
    Il punto non è tanto il fatto di aver messo un String e poi un int (auto-boxato a Integer), perché se il ArrayList non è parametrizzato è possibile (così come sarebbe possibile se fosse parametrizzato ArrayList<Object>).

    Il vero punto è che la comparazione degli oggetti, in generale, prevede che tutti gli oggetti nella lista/array siano "mutualmente comparabili". E String e Integer non lo sono. Insomma, non puoi comparare mele con pere ....
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  3. #3
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Aggiungo: se vuoi comparare oggetti di tipo diverso (e che di serie non sono "mutualmente" comparabili tra di loro) nella lista, es. appunto String e Integer, tecnicamente è possibile.

    Innanzitutto devi avere un ArrayList<Object>. Poi dovresti realizzare una tua classe "comparatore" che implementa Comparator<Object>.
    A quel punto tu ricevi due oggetti e puoi fare tecnicamente quello che vuoi. Se sono entrambi String o Integer, non ci sono dubbi sul risultato (e non ci sono problemi particolari).
    Se hai un String e un Integer ..... devi stabilire tu cosa vuol dire compararli.

    Logica ipotetica che mi viene in mente:
    - se String è parsabile in int (/Integer), fai la conversione e sostanzialmente confronti due valori interi (es. "2" vs 5 ---> confronti 2 e 5)
    - se String non è parsabile in int, converti il numero in String e confronti due stringhe (es. "abc" vs 5 ---> confronti "abc" con "5").

    E' solo una mia idea ... ce ne possono essere altre ....
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.