Pagina 2 di 2 primaprima 1 2
Visualizzazione dei risultati da 11 a 16 su 16

Discussione: Problema con TreeSet

Hybrid View

  1. #1
    Solo per correttezza espositiva e per aiutare qualche altro utente del forum che come me si dovesse trovare in difficoltà:

    codice:
    package prova;
    
    import java.util.Map;
    import java.util.Set;
    import java.util.TreeMap;
    
    public class Esempio {
    
    	public static void main(String[] args) {
    		Object[][] A1 = { { 1, 5, 9 }, { 4, 6, 10 }, { 3, 0, 9 } };
    		Object[][] A2 = { { 0, 9, 9 }, { 2, 1, 10 } };
    		TreeMap<Object, Object[]> tm = new TreeMap<Object, Object[]>();
     for (int i = 0; i < A1.length; i++) {
    			tm.put(A1[i][0], A1[i]);
    		}
    		for (int i = 0; i < A2.length; i++) {
    			tm.put(A2[i][0], A2[i]);
    		}
    		Set<Map.Entry<Object, Object[]>> set = tm.entrySet();
    		int m = set.size();
    		Object[][] B = new Object[m][];
    		int j = 0;
    		for (Map.Entry<Object, Object[]> me : set) {
    			B[j] = new Object[me.getValue().length];
    			B[j] = me.getValue();
    			j++;
    		}
    	}
    }
    Più pratica in futuro...

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Se mi permetti, ti mostro come si può fare con un List (da ordinare esplicitamente) invece che con un TreeMap.

    codice:
    import java.util.*;
    
    public class Esempio {
        public static void main(String[] args) {
            Object[][] A1 = { { 1, 5, 9 }, { 4, 6, 10 }, { 3, 0, 9 } };
            Object[][] A2 = { { 0, 9, 9 }, { 2, 1, 10 } };
    
            List<Object[]> list = new ArrayList<Object[]>();
    
            for (Object[] v : A1) {
                list.add(v);
            }
    
            for (Object[] v : A2) {
                list.add(v);
            }
    
            Collections.sort(list, new Comparator<Object[]>() {
                @SuppressWarnings("unchecked")
                public int compare(Object[] v1, Object[] v2) {
                    return ((Comparable<Object>) v1[0]).compareTo(v2[0]);
                }
            });
    
            Object[][] B = list.toArray(new Object[0][]);
    
            // stampa per verifica
            for (Object[] v : B) {
                System.out.println(Arrays.toString(v));
            }
        }
    }

    Tra l'altro "ad occhio" questo codice mi sembra anche più lineare e comprensibile di quello con TreeMap (riottenere poi un Object[][] è di una banalità ..... con il solo toArray !).

    L'unico "prezzo" da pagare è un "unchecked cast" che ho soppresso con l'annotazione @SuppressWarnings.
    Ma tieni presente che anche in TreeMap c'è un cast del genere, solo che non lo sai/vedi ....
    TreeMap può usare un eventuale Comparator esplicito, altrimenti si basa per default su Comparable, cioè il requisito intrinseco/implicito è che le chiavi siano "comparabili".

    Anche nel Comparator per il List sopra il requisito implicito è che il primo elemento dell'array sia "comparabile".
    Ultima modifica di andbin; 15-01-2014 a 11:47
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  3. #3
    Non ho capito cosa intendi per @SuppressWarnings("unchecked") e mi piacciono molto i cicli for che hai scritto sopra.
    Più pratica in futuro...

  4. #4
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da giannino1995 Visualizza il messaggio
    Non ho capito cosa intendi per @SuppressWarnings("unchecked")
    È una annotation (le annotazioni in generale sono state introdotte in Java 5) per sopprimere nel modo specifico il warning di "unchecked cast" (cast non controllato) che verrebbe emesso dal compilatore.

    Quote Originariamente inviata da giannino1995 Visualizza il messaggio
    mi piacciono molto i cicli for che hai scritto sopra.
    È il enhanced-for (o più semplicemente, come si dice anche in altri linguaggi, il "for-each"), introdotto anch'esso da Java 5.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  5. #5
    Grazie andbin, ci do subito un'occhiata. E' più veloce il tuo metodo oppure il mio?
    Più pratica in futuro...

  6. #6
    Bellezza espositiva a parte, per verificare la velocità prestazionale è necessario un confronto con un matrice Aj bella grande oppure è possibile dire a priori quale sia il migliore?
    Più pratica in futuro...

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 © 2026 vBulletin Solutions, Inc. All rights reserved.