Java TreeMap Comparatore

Ho bisogno di un confronto per un diagramma ad albero. Devo scrivere questo in forma anonima nel costruttore per il mio diagramma ad albero? Come altro potrei scrivere il mio comparatore. Attualmente, Java non piace il mio codice (posso farlo in modo anonimo?):

SortedMap<String, Double> myMap = 
    new TreeMap<String, Double>(new Comparator<Entry<String, Double>>()
    {
        public int compare(Entry<String, Double> o1, Entry<String, Double> o2)
        {
            return o1.getValue().compareTo(o2.getValue());
        } 
    });
  1. Posso farlo in modo anonimo?
  2. Come altro avrei potuto fare questo?
  3. Voglio ordinare myMap dal Valore non



3 Replies
  1. 53

    Si può non ordinare Diagramma ad albero sui valori.

    Un albero Rosso-Nero a base di NavigableMap attuazione. La mappa è ordinato secondo il naturale ordine delle sue chiavi, o da un Comparatore forniti per la creazione di mappe di tempo, a seconda di quale costruttore viene utilizzato
    Sarà necessario fornire comparator per Comparator<? super K> così il comparatore deve confrontare sui tasti.

    Per fornire una sorta sui valori che è necessario SortedSet. Utilizzare

    SortedSet<Map.Entry<String, Double>> sortedset = new TreeSet<Map.Entry<String, Double>>(
                new Comparator<Map.Entry<String, Double>>() {
                    @Override
                    public int compare(Map.Entry<String, Double> e1,
                            Map.Entry<String, Double> e2) {
                        return e1.getValue().compareTo(e2.getValue());
                    }
                });
    
      sortedset.addAll(myMap.entrySet());

    Per dare un esempio

        SortedMap<String, Double> myMap = new TreeMap<String, Double>();
        myMap.put("a", 10.0);
        myMap.put("b", 9.0);
        myMap.put("c", 11.0);
        myMap.put("d", 2.0);
        sortedset.addAll(myMap.entrySet());
        System.out.println(sortedset);

    Di uscita:

      [d=2.0, b=9.0, a=10.0, c=11.0]
    • Come faccio ad aggiungere un elemento alla volta per myMap? myMap.aggiungere(Mappa.Voce<String, Double> nuova Mappa.Voce<String, Double>(vStr, cur));
    • No. si utilizza il metodo di Controllo solo l’esempio che viene aggiunto. Hai messo i valori di Mappa una volta fatto uso SortedSet ordinamento di valori.
    • grazie per la superba risposta
  2. 13

    Il comparatore deve essere solo per la chiave, non per l’intera voce. Ordina le voci in base a chiavi.

    È necessario cambiare qualcosa, come segue

    SortedMap<String, Double> myMap = 
        new TreeMap<String, Double>(new Comparator<String>()
        {
            public int compare(String o1, String o2)
            {
                return o1.compareTo(o2);
            } 
    });

    Aggiornamento

    Si può fare qualcosa, come segue (creare un elenco di voci in mappa e ordinare l’elenco in base al valore, ma questo non ha intenzione di ordinare la mappa stessa) –

    List<Map.Entry<String, Double>> entryList = new ArrayList<Map.Entry<String, Double>>(myMap.entrySet());
        Collections.sort(entryList, new Comparator<Map.Entry<String, Double>>() {
            @Override
            public int compare(Entry<String, Double> o1, Entry<String, Double> o2) {
                return o1.getValue().compareTo(o2.getValue());
            }
        });
    • È possibile ordinare alla carta basato su valori. Ma è possibile ottenere un elenco di voci e ordinare. Ma allora non potrebbe rendere il senso di un diagramma ad albero, a meno che non si passa la chiave e valore.
  3. 0

    è possibile far scorrere la chiave e il valore. Per esempio

            String[] k = {"Elena", "Thomas", "Hamilton", "Suzie", "Phil"};
            int[] v = {341, 273, 278, 329, 445};
            TreeMap<Integer,String>a=new TreeMap();
            for (int i = 0; i < k.length; i++) 
               a.put(v[i],k[i]);            
            System.out.println(a.firstEntry().getValue()+"\t"+a.firstEntry().getKey());
            a.remove(a.firstEntry().getKey());
            System.out.println(a.firstEntry().getValue()+"\t"+a.firstEntry().getKey());
    • Questo è il tentativo di risolvere l’ultima domanda, ma non i primi due.

Lascia un commento