Java的每一种Collection Interface都提供了多种实现,新接触的它们开发人员往往难以理解基于接口的Framework的意义,不知道为什么要提供多种实现,也不知道在某种具体情况下该应用哪一种实现。
看下面这个例子:
import java.util.*;
public class Freq {
public static void main(String args[]) {
Map<String, Integer> m =
new HashMap<String, Integer>();
// Initialize frequency table from command line
for (String a : args) {
Integer freq = m.get(a);
m.put(a, (freq == null ? 1 : freq + 1));
}
System.out.println(m.size() + " distinct words:");
System.out.println(m);
}
}
如果输入的参数为
java Freq if it is to be it is up to me to delegate
则结果为
8 distinct words:
{to=3, delegate=1, be=1, it=2, up=1, if=1, me=1, is=2}
注意,这里我们采用HashMap作为Map的实现。
如果需要在输出时按单词的字典序排序,该怎么办呢?
如果你真正理解了Map的三个实现,那么不需要写任何排序算法,只需要改四个字母:
把上面程序中的HashMap改成TreeMap(因为TreeMap是根据key的值,按照红黑树组织的)
这样,输出就成了:
8 distinct words:
{be=1, delegate=1, if=1, is=2, it=2, me=1, to=3, up=1}
类似的,如果需要按照单词出现的先后排序,需要做的也就是把HashMap改成LinkedHashMap,这样输出就是:
8 distinct words:
{if=1, it=2, is=2, to=3, be=1, up=1, me=1, delegate=1}
通过上面这个小例子,我们可以初步理解基于接口的Framework的威力。
Trackback: http://tb.donews.net/TrackBack.aspx?PostId=533333