This example is for Processing version 1.0+. If you have a previous version, use the examples included with your software. If you see any errors or have comments, please let us know.
HashMap example by Daniel Shiffman.
This example demonstrates how to use a HashMap to store a collection of objects referenced by a key. This is much like an array, only instead of accessing elements with a numeric index, we use a String. If you are familiar with associative arrays from other languages, this is the same idea. * This example uses the HashMap to perform a simple concordance http://en.wikipedia.org/wiki/Concordance_(publishing)
HashMap words; // HashMap object
String[] tokens; // Array of all words from input file
int counter;
PFont f;
void setup() {
size(640, 360);
words = new HashMap();
// Load file and chop it up
String[] lines = loadStrings("dracula.txt");
String allText = join(lines, " ");
tokens = splitTokens(allText, " ,.?!:;[]-");
f = createFont("Georgia", 36, true);
}
void draw() {
background(255);
fill(0);
// Look at words one at a time
String s = tokens[counter];
counter = (counter + 1) % tokens.length;
// Is the word in the HashMap
if (words.containsKey(s)) {
// Get the word object and increase the count
// We access objects from a HashMap via its key, the String
Word w = (Word) words.get(s);
w.count();
} else {
// Otherwise make a new word
Word w = new Word(s);
// And add to the HashMap
// put() takes two arguments, "key" and "value"
// The key for us is the String and the value is the Word object
words.put(s, w);
}
// Make an iterator to look at all the things in the HashMap
Iterator i = words.values().iterator();
// x and y will be used to locate each word
float x = 0;
float y = height-10;
while (i.hasNext()) {
// Look at each word
Word w = (Word) i.next();
// Only display words that appear 3 times
if (w.count > 3) {
// The size is the count
int fsize = constrain(w.count, 0, 100);
textFont(f, fsize);
text(w.word, x, y);
// Move along the x-axis
x += textWidth(w.word + " ");
}
// If x gets to the end, move Y
if (x > width) {
x = 0;
y -= 100;
// If y gets to the end, we're done
if (y < 0) {
break;
}
}
}
}
class Word {
int count;
String word;
Word(String s) {
word = s;
count = 1;
}
void count() {
count++;
}
}


