f3d0r
f3d0r

Reputation: 561

Alphabetize a HashMap of Characters

I have a program that takes the number of instances of a character in a string and then puts them into a HashMap. I have it working, but how do I alphabetize the HashMap. Here is my code:

import java.util.*;
import java.lang.*;
import javax.swing.JOptionPane;
import java.io.*;
public class CharacterCount
{
   public static void main(String args[])
   {
      {
      String s = JOptionPane.showInputDialog("Enter in any text.");
      String str = s.replaceAll("[., ]", "");
      String[] splitted = str.split("");
      HashMap hm = new HashMap();

      for (int i = 0; i < splitted.length; i++) {
         if (!hm.containsKey(splitted[i])) {
            hm.put(splitted[i], 1);
         } else {
            hm.put(splitted[i], (Integer) hm.get(splitted[i]) + 1);
            }
      }
      for (Object word : hm.keySet()) {
         if (word.equals("")) {
            System.out.println("Spaces: " + (Integer) hm.get(word));
            }
         else {
            System.out.println(word + ": " + (Integer) hm.get(word));
            }
         }
      }
   }
}

What do I need to add to make it alphabetize/reorganize the HashMap?

Upvotes: 1

Views: 309

Answers (2)

keshlam
keshlam

Reputation: 8058

Most maps, including HashMap, make no promises about order of contents. Consider SortedMap, or maintaining both a hash map and a sorted list in parallel.

Difference between HashMap, LinkedHashMap and TreeMap

Upvotes: 0

Jack
Jack

Reputation: 133629

An HashMap is, by default, unsorted. This because its implementation can't rely on order of elements.

If you need a sorted map then you will have to look into a TreeMap which supplies the same interface as a HashMap but it's inherently sorted on keys according to their natural ordering (or a custom Comparator). Mind that a TreeMap doesn't allow ordering on values, so if you need to sort your data by value then you will have to build your own sorted collection.

This is usually done by taking the Map.Entry<K,V> entrySet() and then build a new SortedSet by following your ordering rules.

Upvotes: 2

Related Questions